【发布时间】:2012-05-14 05:51:38
【问题描述】:
据我所知,从 java.lang.Thread 文档和 stackoverflow 上发布的其他问题(例如“How to access a Runnable object by Thread?”和“Get current instance of Runnable”)无法获得 Runnable 对象的引用嵌入Thread。
这种可能性很有用的一个场景是在实现一个方法时,它的签名不能被修改,因为我们正在覆盖另一个类或接口中定义的方法,并且需要根据类型执行不同的操作的Runnable 嵌入当前Thread。
如果我们在 Thread 类中有一个名为 getRunnable 的方法,我们可以这样做:
if (Thread.currentThread().getRunnable() instanceof Type1) {
// do something...
} else {
// do something else...
}
这在我们希望确保方法中包含的操作仅由某些线程执行而不由其他线程执行的情况下也很有用。
所以我想知道,Java 开发人员决定不允许从 Thread 获取 Runnable 实例是否有特定原因,或者它是否是一个值得通知的缺失功能?如果您认为该选择没有任何理由,但不值得将其通知为缺少功能,那么您会在上述场景中使用什么策略?
【问题讨论】:
-
使用
main方法的主线程的“可运行”是什么? -
像您在示例中所做的那样在
instanceof的结果上进行分支几乎不是一个好主意。 -
我不会提供这个作为答案,因为它会很密集,但是嘿。您可以查看使用线程堆栈跟踪。
Thread.currentThread().getStackTrace(). -
我不知道原因,但是您也可以扩展 Thread 类,并在您的子类中保留对 Runnable 对象的引用,并在需要时提供 getter 方法来获取 Runnable。
-
并非所有
Thread实例都有可运行文件,不是吗?
标签: java multithreading concurrency runnable