关于线程的一般讨论(混乱)

时间:2011-10-04 09:07:00

标签: java multithreading

我只想知道以下两种调用线程的方法有什么区别。

请查看两个场景的两张图片

Thread Implementation Scenario 1

Thread Implementation Scenario 2

我的问题是我遇到的行为是当我遵循“情景1”时我失去了对我的程序的控制权和

  

MyClass中的“//其他命令”没有运行

当我按照方案二时,我的顺序很顺利。有没有人注意到这种行为或是故障?

请发表意见。

此致

2 个答案:

答案 0 :(得分:0)

我想这不是实现Thread(这不是已经说明的接口),而是实现Runnable

所以问题似乎是(这只是一个猜测,因为你的问题丢失了):谁应该开始主题 - MyClassMyThread

基本上,我更喜欢方案1,因为MyThread实际上只是一个可运行的任务,不应该另外处理线程本身。

因此MyClass应该创建并启动线程。这将允许您保留对生成的线程的引用,并可能稍后调用join()或其他方法。

作为旁注,我将MyThread更改为:public class MyRunnable implements Runnable { ... }

答案 1 :(得分:0)

您可能想要访问Thread对象,例如等待它完成或轮询它的状态。在方案2中,您可能不会这样做,因为无法从客户端代码访问变量t。为了实现这一点,您必须从外部代码中看到t或覆盖Thread方法(这将是徒劳的)。如果invokeThread是某种便利方法,您可以考虑返回t

如果方案2的意思是“MyThread封装运行线程并控制它的状态”,则不必扩展Thread(这看起来有点令人困惑)。

the other comment中所述,我会先实施Runnable,而不是将Thread子类化为更清晰的代码。