【发布时间】:2020-01-02 14:13:59
【问题描述】:
我对以下代码的输出(在两个选项之间)以及原因感到困惑: 根据我的理解,输出应该是 option1,因为使用了同步关键字。
输出选项:
- Java 线程 ThreadExample JavaMultithreading。
- 无法确定打印文本的顺序。
class ThreadDemo extends Thread
{
final StringBuffer sb1 = new StringBuffer();
final StringBuffer sb2 = new StringBuffer();
public static void main(String args[])
{
final ThreadDemo h = new ThreadDemo();
new Thread()
{
public void run()
{
synchronized(this)
{
h.sb1.append("Java");
h.sb2.append("Thread");
System.out.println(h.sb1);
System.out.println(h.sb2);
}
}
}.start();
new Thread()
{
public void run()
{
synchronized(this)
{
h.sb1.append("Mutithreading");
h.sb2.append("Example");
System.out.println(h.sb2);
System.out.println(h.sb1);
}
}
}.start(); }}
【问题讨论】:
-
您对输出将是什么感到困惑 - 为什么不运行代码并亲自查看?
-
为什么你认为在这里使用
synchronized(this)有什么作用?这是您正在创建的两个完全独立的Thread对象。
标签: java multithreading synchronized