我正在使用synchronized语句并制作了以下程序...将runn类与此作为对象引用进行同步..bt smhw所需的输出是那里....
class runn extends Thread {
String s;
runn(String a) {
s=a;
start();
}
public void show() {
System.out.print("["+s);
try {
sleep(50);
} catch(Exception a){}
System.out.print("]");
}
public void run() {
synchronized(this) {
show();
}
}
}
public class multi4 {
public static void main(String[] args) throws InterruptedException{
new runn("hello ");
new runn("this is ");
new runn("multithreading");
}
}
输出应为:
[hello][this is][multithreading]
但同步无法正常工作
请帮忙。
答案 0 :(得分:2)
两个错误:
synchronized
对象runn
。这没有任何效果,因为每个线程使用不同的同步对象。synchronized
关键字不会神奇地导致线程按顺序运行。它只是阻止线程同时尝试执行synchronized
块,如果你在同一个对象上同步,。它们仍然可以以任何顺序运行,但不能交错它们的输出。也就是说,如果您在共享对象上synchronized
,则可以获得[this is][hello][multithreading]
,但不是[this is[hello][multithreading]]
。