gpt4 book ai didi

java - 如何选择同步对象还是方法

转载 作者:行者123 更新时间:2023-11-30 01:59:58 25 4
gpt4 key购买 nike

我在互联网上找到了这个同步示例,但我不太明白同步该特定示例中的对象和方法之间有什么区别。这里同步是在对象发送者上进行的;是否可以同步方法send并获得相同的结果?

// A Java program to demonstrate working of 
// synchronized.
import java.io.*;
import java.util.*;

// A Class used to send a message
class Sender
{
public void send(String msg)
{
System.out.println("Sending\t" + msg );
try
{
Thread.sleep(1000);
}
catch (Exception e)
{
System.out.println("Thread interrupted.");
}
System.out.println("\n" + msg + "Sent");
}
}

// Class for send a message using Threads
class ThreadedSend extends Thread
{
private String msg;
private Thread t;
Sender sender;

// Recieves a message object and a string
// message to be sent
ThreadedSend(String m, Sender obj)
{
msg = m;
sender = obj;
}

public void run()
{
// Only one thread can send a message
// at a time.
synchronized(sender)
{
// synchronizing the snd object
sender.send(msg);
}
}
}

// Driver class
class SyncDemo
{
public static void main(String args[])
{
Sender snd = new Sender();
ThreadedSend S1 =
new ThreadedSend( " Hi " , snd );
ThreadedSend S2 =
new ThreadedSend( " Bye " , snd );

// Start two threads of ThreadedSend type
S1.start();
S2.start();

// wait for threads to end
try
{
S1.join();
S2.join();
}
catch(Exception e)
{
System.out.println("Interrupted");
}
}
}

最佳答案

在您的示例中,同步对象和将发送方法声明为synchronized之间实际上没有任何区别。

但总的来说,在对象上进行同步的优点是:

  1. 调用者可以选择是否同步。
  2. 调用者可以在同步块(synchronized block)中放置其他代码,而不仅仅是对 send 方法的调用。 (例如,如果您想同步对不同对象的调用)。

在该方法上进行同步的优点是:

  1. 同步是自动的,由被调用的类决定。调用者不需要知道它。
  2. 您可以根据需要使用同步和非同步方法。

关于java - 如何选择同步对象还是方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53222617/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com