小编典典

将单个可运行对象传递给多个线程构造函数

java

如果我创建一个可运行的对象

Runnable run = new MyRunnable();

然后将相同的对象传递给两个线程构造函数并运行它们

new Thread(run).start;
new Thread(run).start;
  1. 有可能吗?这意味着什么?
  2. 如果我调用Thread.sleep(0); 在MyRunnable类中,两个线程会因为它们是同一对象而休眠,还是线程实体与该对象完全分开?
  3. 是否会有理由这样做,如果不能,请仍然回答上面的两个问题,因为我还不完全了解线程机制?

阅读 153

收藏
2020-11-13

共1个答案

小编典典

  1. 这绝对是可能和合法的。如果您Runnable没有状态(没有字段),那么一切都会好起来的。如果Runnable确实具有可变状态,则可能需要使用Java的许多 互斥机制之一, 例如ReentrantLocksynchronized关键字。因为两个线程都将使同一Runnable对象的字段发生变化。

  2. 不,您创建并运行了两个不同的线程。他们只是打电话Runnable.run()

  3. 这并非超出可能性范围。我什至不会说这一定是坏习惯。您可能会做的特定情况留给读者作为练习…

2020-11-13