【发布时间】:2022-01-27 22:30:29
【问题描述】:
class Demo extends Thread{
Test x;
String name;
String task;
public Demo(String name, String task, Test p){
this.name = name;
this.task = task;
x = p;
}
public void run(){
synchronized (x) {
x.message(name, task);
}
}
public static void main(String[] args) {
Test t = new Test();
Demo d = new Demo("Jack", "Cutting",t);
Demo d1 = new Demo("Jacoe", "Cooking",t);
Demo d2 = new Demo("Bob", "Cleaning",t);
d.start();
d1.start();
d2.start();
}
}
class Test{
void message(String name, String task){
System.out.println(name);
try{
Thread.sleep(5000);
}catch(Exception e){
}
System.out.println(task);
}
}
这是我创建的一个简单程序,用于在 java 中练习多线程和同步。我想知道是否有人可以向我解释为什么从 public void run() 方法中删除同步块时输出不同?
【问题讨论】:
-
因为......任何时候都只能有一个线程在同步块中。另请参阅what is synchronization of thread in java? 中的更完整答案
标签: java multithreading synchronization synchronized