rub*_*buc 11 java multithreading
如果我创建一个可运行的对象
Runnable run = new MyRunnable();
Run Code Online (Sandbox Code Playgroud)
然后将同一个确切的对象传递给两个线程构造函数并运行它们
new Thread(run).start;
new Thread(run).start;
Run Code Online (Sandbox Code Playgroud)
ulm*_*ngt 11
这绝对是可能和合法的.如果你Runnable没有国家(没有领域),那么一切都会好的.如果您Runnable确实有可变的状态,那么你可能需要使用Java的许多一个互斥机制类似ReentrantLock或synchronized关键字.因为两个线程都会改变同一个Runnable对象的字段.
不,你创建并运行了两个不同的线程.他们只是打电话Runnable.run().
这不是出于可能性的范畴.我甚至不会说这一定是不好的做法.你可以这样做的具体情况留给读者作为练习......
1)可能吗?有什么影响?
对的,这是可能的.
这意味着Runnable中的任何状态(可能)都被所有线程共享,并且需要正确地同步对该状态的访问/更新.
2)如果我调用Thread.sleep(0); 在类MyRunnable中,两个线程都会因为它们是同一个对象而睡眠,还是线程实体与对象完全分离?
不,他们不会.
线程在逻辑上与Runnable.调用Thread.sleep()不会直接影响Runnable可能共享它的其他线程.(它可能会间接影响其他线程;例如,如果一个线程在保持Runnable的原始锁定时休眠,而其他线程需要获取锁定才能进行.)
3)是否有理由这样做,如果不是,请仍然回答上面的两个问题,因为我不认为我完全理解线程机制了吗?
您可能会如果没有与关联没有特定的线程状态做到这一点Runnable,你要尽量减少空间开销,或初始化的开销Runnable.但是这种用例在实践中很少见.
在绝大多数真实用例中,每个线程都需要一个不同的Runnable实例.
| 归档时间: |
|
| 查看次数: |
6059 次 |
| 最近记录: |