为什么不同步运行java方法?
我正在做一个关于Java线程的短期课程,在我的一个家庭作业中,他们问我:?为什么不同步run方法?举个例子 我搜索了一下,我认为使用synchronized for run方法是没有用的,至少在一般情况下是没有用的。因为用户不手动调用run方法,所以使用synchronized run创建对象的多个实例时,同步效果不可见为什么不同步运行java方法?,java,multithreading,Java,Multithreading,我正在做一个关于Java线程的短期课程,在我的一个家庭作业中,他们问我:?为什么不同步run方法?举个例子 我搜索了一下,我认为使用synchronized for run方法是没有用的,至少在一般情况下是没有用的。因为用户不手动调用run方法,所以使用synchronized run创建对象的多个实例时,同步效果不可见 因此,我想知道是否存在其他原因,或者我是否错了。同步Runnable的run()方法是完全没有意义的,除非您希望在多个线程之间共享Runnable,并且希望序列化这些线程的执行
因此,我想知道是否存在其他原因,或者我是否错了。同步Runnable的run()方法是完全没有意义的,除非您希望在多个线程之间共享Runnable,并且希望序列化这些线程的执行。这在术语上基本上是矛盾的。如果
Runnable
的run
方法是同步的
,那么
a) 您有许多可运行程序(在这种情况下,不需要同步,因为每个可运行程序都在不同的对象上调用),或者
b) 在多个线程中调用一个runnable,但它们显然不会并行运行,因此无法实现多线程的目的 您可以在运行时同步方法,它没有问题。我认为这个建议背后的原因当然应该由讲师向你解释
- 当存在共享资源(线程之间)时,我们需要同步李>
- 在方法上同步与在
上同步相同,后者将阻止其他方法调用李>this
public class SynchronizedRun {
static abstract class Future<T> implements Runnable{
private T value;
public synchronized T getValue(){
return value;
}
protected void setValue(T val){
value = val;
}
}
public static void main(String[] args) {
Future<Integer> longRunningJob = new Future<Integer> (){
@Override
synchronized public void run() {
try {
Thread.sleep(5000);
setValue(42);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
new Thread(longRunningJob).start();
System.out.println("getting results");
System.out.println("result = " + longRunningJob.getValue());
}
}
公共类同步运行{
静态抽象类Future实现可运行{
私人T值;
公共同步的T getValue(){
返回值;
}
受保护的无效设置值(T val){
值=val;
}
}
公共静态void main(字符串[]args){
Future longRunningJob=新未来(){
@凌驾
已同步的公共void运行(){
试一试{
睡眠(5000);
设定值(42);
}捕捉(中断异常e){
e、 printStackTrace();
}
}
};
新线程(longRunningJob).start();
System.out.println(“获取结果”);
System.out.println(“result=“+longRunningJob.getValue());
}
}
谢谢你,我的朋友。谢谢你,我的朋友。