Scenario where extending thread is preferred than implement Runnable?
作为初学者,我阅读了Java中实现多线程的2种方法。
我在某某和其他许多线程上都读过这个线程。
据说
"prefer runnable" , extends thread only when you are specialising Thread's behaviour.
有人能给我一小段帮助我理解这一行的代码片段,来解释一下专门化线程行为是什么意思吗?
您应该像扩展其他库类一样扩展
以
你是否想在这里扩展
因此,扩展线程的一个例子是一个在特定时间后自行终止的线程。然后您将拥有
这甚至强化了你应该把实际任务放在
现在您可以执行以下任一操作:
- 埃多克斯1〔19〕
- 埃多克斯1〔20〕
所以这是一个扩展线程的用例。
专门化意味着扩展现有线程类的功能。它可以是任何东西,这取决于应用程序的需求。我在下面提到的那个可能逻辑上不正确。
1 2 3 4 5 6 7 8 9 | public class MyThread extends Thread{ @Override public void interrupt() { if(thread has started some operation on database){ //roll back transaction } super.interrupt(); } } |
。
在中断线程之前,我们可以检查当前是否有任何数据库操作正在运行,并回滚它。虽然可以从中断的catch块完成,但是如果在应用程序的不同位置创建了许多此线程的实例,那么从扩展类处理它可以减少行数。这只是一个例子,没有人会用这种方式。:)
与线程扩展相比,首选可运行实现有以下几个原因:
总是更喜欢组合而不是继承,最终会得到耦合度更低的代码。决定类如何与线程相关的一种方法是检查"是"关系与"有"关系。
实际上,扩展线程将强制您为每个线程创建类的新实例实例,而不是在可运行的情况下共享相同的实例。看看这个。
Java只支持单个继承
扩展线程的合法用例的一个例子是,当需要设计一个具有作为cachedThreadPool一部分的自定义属性(例如:缓存资源)的线程类时
Java不支持多重继承,这意味着只能在Java中扩展一个类,所以一旦扩展了EDCOX1,1类,就失去了机会,不能在Java中扩展或继承另一个类,所以该类仅用于线程。
通过
扩展类通常意味着添加新功能、修改或改进行为。如果我们不在
线程类有一些由JDK开发人员决定的行为,当您想对它进行一些修改时,您可以使用
因为Java不支持多继承。如果您有一个名为Person的类。
1 2 3 4 |
然后你要创造一个能扩展人的阶级人
1 2 3 | class Man extends Person{ } |
号
现在,您已经使用了extends关键字来声明人是一个人。然后,如果你希望一个EDCOX1的0个字节像一个线程那样执行,那么你就不能再扩展EDCOX1 1,因为Java不支持多继承。所以只要使用EDCOX1×2接口就可以与其他接口一起实现。
1 2 3 4 |
编辑:"只在线程的行为专用时扩展线程"意味着您的类只是一个没有其他特征的线程,因为当您的类包含其他特征时,您需要扩展其他超级类而不是EDCOX1的1类。正如我之前提到的,Java不支持多继承,所以只需退出。只有当你特别注意线程的行为时,才会使用DS线程。