gpt4 book ai didi

Java:如何让2个Thread交替使用一个方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:24 24 4
gpt4 key购买 nike

线程有点新。

我有 2 个线程并希望它们交替使用一种方法。所以线程 1 执行该方法,然后等待。然后线程 2 唤醒线程 1 并执行该方法。然后线程 1 唤醒线程 2 并执行方法等。但不知何故,我陷入了僵局,我不明白为什么。

public class NewT extends Thread{


public void print(NewT x)
{

synchronized(this)
{

System.out.println("x"+x);
notifyAll();
try {
wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}


}

public void run()
{

for(int i=0;i<10;i++)
{
print(this);
}


}

public static void main(String[] args) {
// TODO Auto-generated method stub

NewT one = new NewT();
NewT two = new NewT();


one.start();
two.start();




}

}

最佳答案

由于 synchronizedthis 上,每个线程都锁定自己的对象,实际上没有同步;他们正在等待一个永远不会发生的事件。

更新:

正如有人指出的那样,使用公共(public) lock 对象是不够的,因为两个线程最终都会等待。

解决方法:

private static Object lock = new Object();
private static NewT previous;

public static void print(NewT x) throws InterruptedException
{
synchronized(lock) {
while (previous == x) {
lock.wait();
}
System.out.println("x"+ x);
previous = x;
lock.notifyAll();
}
}

关于Java:如何让2个Thread交替使用一个方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51499597/

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