Java多线程同步使用
我不清楚以下代码在两个选项之间的输出是什么,以及为什么: 根据我的理解,输出应该是option1,因为使用了synchronized关键字 输出选项: Java线程示例Java多线程。 无法确定文本的打印顺序。Java多线程同步使用,java,multithreading,synchronized,Java,Multithreading,Synchronized,我不清楚以下代码在两个选项之间的输出是什么,以及为什么: 根据我的理解,输出应该是option1,因为使用了synchronized关键字 输出选项: Java线程示例Java多线程。 无法确定文本的打印顺序。 首先,不知道哪个线程将在另一个线程之前运行。所以您不能肯定地断言Java线程将先于多线程示例。它可能会发生,也可能不会 其次,run方法上的synchronized关键字是不相关的,因为每个线程都锁定在自己的监视器上。因此,没有理由认为Java和thread必须一起打印,中间没有任何内容
首先,不知道哪个线程将在另一个线程之前运行。所以您不能肯定地断言Java线程将先于多线程示例。它可能会发生,也可能不会 其次,run方法上的synchronized关键字是不相关的,因为每个线程都锁定在自己的监视器上。因此,没有理由认为Java和thread必须一起打印,中间没有任何内容。它可能会发生,也可能不会
这里起作用的锁在StringBuffers和stdout打印流上。这些对象在其方法上使用synchronized,获取监视器并在方法调用期间保持它。这可以防止修改同一对象状态的并发调用相互干扰 首先,不知道哪个线程将在另一个线程之前运行。所以您不能肯定地断言Java线程将先于多线程示例。它可能会发生,也可能不会 其次,run方法上的synchronized关键字是不相关的,因为每个线程都锁定在自己的监视器上。因此,没有理由认为Java和thread必须一起打印,中间没有任何内容。它可能会发生,也可能不会
这里起作用的锁在StringBuffers和stdout打印流上。这些对象在其方法上使用synchronized,获取监视器并在方法调用期间保持它。这可以防止修改同一对象状态的并发调用相互干扰 您不知道输出将是什么-为什么不运行代码并亲自查看?为什么您认为使用synchronizedthis可以做任何事情?这是您正在创建的两个完全独立的线程对象。您不知道输出将是什么-为什么不运行代码并亲自查看?为什么您认为使用synchronizedthis可以做任何事情?这是您正在创建的两个完全独立的线程对象。
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(); }}