gpt4 book ai didi

java - 线程同步行为

转载 作者:行者123 更新时间:2023-11-29 09:36:42 25 4
gpt4 key购买 nike

class Untitled {
public static void main(String[] args) {
MyRunnable r1 = new MyRunnable();
Thread t1 = new Thread(r1,"Thread 1:");
Thread t2 = new Thread(r1,"Thread 2:");
t1.start();
t2.start();

}
}

class MyRunnable implements Runnable
{
String s1 = "Hello World";
String s2 = "Hello New World";
public void run()
{
synchronized(s1)
{
for(int i =0;i<3;++i)
System.out.println(Thread.currentThread().getName()+s1);

}
synchronized(s2)
{
for(int i = 0;i<3;++i)
System.out.println(Thread.currentThread().getName()+s2);
}

}
}

输出:

Thread 1:Hello World
Thread 1:Hello World
Thread 1:Hello World
Thread 1:Hello New World
Thread 2:Hello World
Thread 1:Hello New World
Thread 2:Hello World
Thread 1:Hello New World
Thread 2:Hello World
Thread 2:Hello New World
Thread 2:Hello New World
Thread 2:Hello New World

为什么当 Thread1 正在执行第一个同步块(synchronized block)时,Thread2 不能在 run() 方法中执行第二个同步块(synchronized block),即使锁对象不同。Thread2 的执行是否在第一个同步块(synchronized block)处等待,直到 Thread1 离开该 block ??

如果是这样,如何让两个同步块(synchronized block)同时运行??

最佳答案

Does Thread2's execution wait at the first synchronized block till Thread1 leaves that block??

是的,就是这个想法 - 线程 2 一个接一个地执行 block 。如果它被阻塞而无法进入第一个,它将在那里等待,直到 s1 锁可用。

If so how to make both synchronized blocks run concurrently??

您需要将它们分成两个不同的可运行对象,并为每个使用一个线程。

关于java - 线程同步行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15568278/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com