gpt4 book ai didi

java - 你应该同步运行方法吗?为什么或者为什么不?

转载 作者:IT老高 更新时间:2023-10-28 20:56:04 24 4
gpt4 key购买 nike

我一直认为在实现 Runnable 的 java 类中同步 run 方法是多余的。 我想弄清楚人们为什么这样做:

public class ThreadedClass implements Runnable{
//other stuff
public synchronized void run(){
while(true)
//do some stuff in a thread
}
}
}

这似乎是多余和不必要的,因为他们正在为另一个线程获取对象的锁。或者更确切地说,他们明确表示只有一个线程可以访问 run() 方法。但是既然是run方法,那它本身不就是自己的线程吗?所以只有它自己可以访问,不需要单独的锁机制?

我在网上找到了一个建议,通过同步 run 方法,您可能会创建一个事实上的线程队列,例如这样做:

 public void createThreadQueue(){
ThreadedClass a = new ThreadedClass();
new Thread(a, "First one").start();
new Thread(a, "Second one, waiting on the first one").start();
new Thread(a, "Third one, waiting on the other two...").start();
}

我永远不会亲自这样做,但这会引发一个问题,即为什么有人会同步 run 方法。 任何想法为什么或为什么不应该同步 run 方法?

最佳答案

同步 Runnablerun() 方法是完全没有意义的除非你想共享 Runnable在多个线程中,您希望按顺序执行这些线程。这基本上是一个矛盾的术语。

理论上还有另一个更复杂的场景,您可能希望同步 run() 方法,这同样涉及在多个线程之间共享 Runnable,但也使用 wait()notify()。我在 21 多年的 Java 中从未遇到过它。

关于java - 你应该同步运行方法吗?为什么或者为什么不?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7313657/

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