This question already has answers here:
Initializing two threads with the same instance of a runnable

(4个答案)


7年前关闭。




如果我创建一个可运行的对象
Runnable run = new MyRunnable();

然后将相同的对象传递给两个线程构造函数并运行它们
new Thread(run).start;
new Thread(run).start;
  • 有可能吗?这意味着什么?
  • 如果我调用Thread.sleep(0);在MyRunnable类中,两个线程会因为它们是同一对象而 hibernate ,还是线程实体与该对象完全分开?
  • 是否会有理由这样做,否则请继续回答以上两个问题,因为我还不完全了解线程机制?
  • 最佳答案

  • 绝对可能并且合法。如果您的Runnable没有状态(没有字段),那么一切都会好起来的。如果Runnable确实具有可变状态,那么您可能需要使用Java的许多互斥机制之一,例如ReentrantLocksynchronized关键字。因为两个线程都将变异同一个Runnable对象的字段。
  • 不,您创建并运行了两个不同的线程。他们只是简单地调用Runnable.run()
  • 这并非超出可能性范围。我什至不会说这一定是坏习惯。您可能要做的特定情况留给读者作为练习...
  • 08-04 15:03