【发布时间】:2017-12-08 17:15:12
【问题描述】:
我无法在这里实现线程同步。我使用了同步方法“meth”her。所以根据定义,一次只能输入一个线程并打印我想要的输出。但这并没有发生。需要帮忙。谢谢你。
class ABC {
synchronized public void meth(String msg) {
System.out.print("[" + msg);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
System.out.println(Thread.currentThread().getName() + " Thread Interrupted");
}
System.out.println("]");
}
}
class SyncMethod implements Runnable {
ABC a = new ABC();
Thread t;
SyncMethod(String s) {
t = new Thread(this, s);
t.start();
}
public void run() {
a.meth(t.getName());
}
public static void main(String args[]) {
new SyncMethod("Hello");
new SyncMethod("Synchronized");
new SyncMethod("World");
}
}
电流输出:
[Hello [Synchronized [World] ] ] ]
期望的输出:
[Hello]
[Synchronized]
[World]
【问题讨论】:
-
线程执行顺序未知。由于您在野外启动 3 个线程,它们可以以任意顺序启动
-
编辑问题以包含您实际看到的输出以及您希望看到的内容可能对您有所帮助。
-
@DaveyDaveDave 它一直都在那里,只是隐藏在代码块中。已编辑。
-
请注意,即使同步正确,您也不一定会看到该输出。你可能会看到
[World] [Hello] [Synchronized]。 -
另外:不要在构造函数中启动线程。这使得在其他情况下无法使用
Runnable,例如提交给ExecutorService。请致电new Thread(new SyncMethod(...)).start();。
标签: java