Java 如何选择是同步对象还是同步方法
我在Internet上找到了这个同步示例,但我并不真正理解在这个特定示例中同步对象和方法之间的区别。在这里,同步是在对象发送方上进行的;是否可以同步发送方法并获得相同的结果Java 如何选择是同步对象还是同步方法,java,multithreading,concurrency,synchronization,Java,Multithreading,Concurrency,Synchronization,我在Internet上找到了这个同步示例,但我并不真正理解在这个特定示例中同步对象和方法之间的区别。在这里,同步是在对象发送方上进行的;是否可以同步发送方法并获得相同的结果 // A Java program to demonstrate working of // synchronized. import java.io.*; import java.util.*; // A Class used to send a message class Sender { pub
// 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");
}
}
}
在您的示例中,在对象上同步与将send方法声明为
synchronized
之间实际上没有任何区别
但一般来说,在对象上同步的优点是:
在这种情况下,对
sender
对象的访问将不是线程安全的。但是,在这种情况下,sender对象只实现了1个方法,所以它是相同的,对吗?没错!