【发布时间】:2018-07-16 07:37:22
【问题描述】:
我正在尝试运行以下代码,但无法获得正确的输出。
预期输出 "欢迎新程序员"
实际输出 “新欢迎程序员”
class First {
public synchronized void display(String msg) {
System.out.print("["+msg);
System.out.println("]");
}
}
class Second {
String msg;
First fobj;
Second (First fp,String str) {
fobj = fp;
msg = str;
start();
}
public void run() {
synchronized(fobj) { //Synchronized block
fobj.display(msg);
}
}
}
public class SyncroBlock {
public static void main (String[] args) {
First fnew = new First();
Second ss = new Second(fnew, "welcome");
Second ss1 = new Second(fnew,"new");
Second ss2 = new Second(fnew, "programmer");
}
}
我在哪里做错了? 有人可以纠正我吗?
【问题讨论】:
-
你这里没有做多线程,所以问题与
synchronized无关。如果您删除synchronized关键字/包装器,它将打印相同的内容。 - 或者您是否忘记了代码中的某些内容?Second类中没有start()方法,所以这甚至不会编译。 -
@Jesper,他在做,只是错过了示例中的
extends Thread -
除了上面的注释:你的
Second构造函数正在调用缺少的方法start();。您是否不小心删除了重要细节? -
第二类stackoverflow.com/users/135589/jesper中已经定义了启动方法
-
请注意,
synchronized块是多余的,因为您创建了display()方法synchronized
标签: java multithreading synchronisation