2011-10-04 81 views
-1

一般性讨论我只是想知道什么是调用线程的以下两种方法之间的差异。约线程(混乱)

请看两种情况

Thread Implementation Scenario 1

的两张图片

Thread Implementation Scenario 2

我的问题是,我所面临的问题是,当我按照“方案1”我失去了我的程序的控制和在所述MyClass的

“//其他命令” 运行didnt

当我跟随的场景我的两个序列是平稳。有没有人注意到这种行为或者是故障?

请给你的意见。

问候,

+2

两者都是不正确的,因为他们甚至不进行编译。线程是一个类,而不是一个接口。所以你不能实现它。 –

+0

这种情况下的线程接口是什么?在标准的Java中,Thread是一个类,而不是一个接口。 –

+0

哦,抱歉,它的一个大错字它没有实现Thread,它是实现Runnable。希望你会忽略这个错误,并会继续调用机制 –

回答

0

我想这不是实现Thread(这是不是一个接口如前所述),你的意思是实现Runnable

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

基本上,我宁愿场景1,因为MyThread实际上只是一个可运行的任务,不应该额外处理线程本身。

因此MyClass应该创建并启动线程。这还可以让你继续引用产生的线程,并可能在稍后调用join()或其他方法。

一点题外话,我会改变MyThread到这一点:public class MyRunnable implements Runnable { ... }

+0

是的托马斯,我的意思是实施Runbable其不是线程是一个错字,很抱歉。 –

0

你可能想访问Thread对象,例如等待它完成或轮询它的状态。在场景2中,您可能不会这样做,因为客户端代码无法访问变量t。为了达到这个目的,您必须从外部代码可见t或覆盖Thread方法(这将是有点徒劳的)。如果invokeThread意味着某种方便的方法,您可以考虑返回t

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

正如the other comment提到的,我会第二实施Runnable,而不是继承Thread更清洁的代码。

+0

Chabicht我已经改变了它的图像这是一个错误的错误它没有实现线程它实现Runnable对这个错误抱歉 –

+0

我已经包括我的观察我注意到我的问题后编辑它。 –