This question already has answers here:
Initializing two threads with the same instance of a runnable
(4个答案)
7年前关闭。
如果我创建一个可运行的对象
然后将相同的对象传递给两个线程构造函数并运行它们
有可能吗?这意味着什么? 如果我调用Thread.sleep(0);在MyRunnable类中,两个线程会因为它们是同一对象而 hibernate ,还是线程实体与该对象完全分开? 是否会有理由这样做,否则请继续回答以上两个问题,因为我还不完全了解线程机制? 绝对可能并且合法。如果您的 不,您创建并运行了两个不同的线程。他们只是简单地调用 这并非超出可能性范围。我什至不会说这一定是坏习惯。您可能要做的特定情况留给读者作为练习...
(4个答案)
7年前关闭。
如果我创建一个可运行的对象
Runnable run = new MyRunnable();
然后将相同的对象传递给两个线程构造函数并运行它们
new Thread(run).start;
new Thread(run).start;
最佳答案
Runnable
没有状态(没有字段),那么一切都会好起来的。如果Runnable
确实具有可变状态,那么您可能需要使用Java的许多互斥机制之一,例如ReentrantLock
或synchronized
关键字。因为两个线程都将变异同一个Runnable
对象的字段。 Runnable.run()
。 08-04 15:03