gpt4 book ai didi

java - 为什么不可能将 Runnable 嵌入到线程中?

转载 作者:搜寻专家 更新时间:2023-10-31 08:17:44 24 4
gpt4 key购买 nike

据我了解 java.lang.Thread 文档,以及在 stackoverflow 上发布的其他问题,如“How to access a Runnable object by Thread?”和“Get current instance of Runnable”,无法获得 Runnable 的引用对象嵌入 Thread .

具有这种可能性的场景是在实现一个方法时,其签名无法修改,因为我们正在覆盖另一个类或接口(interface)中定义的方法,并且需要根据类型执行不同的操作的 Runnable嵌入当前 Thread .

例如,如果我们有一个名为 getRunnable 的方法在Thread我们可以做这样的事情:

if (Thread.currentThread().getRunnable() instanceof Type1) {
// do something...
} else {
// do something else...
}

这在我们希望确保方法中包含的操作仅由特定线程执行而不由其他线程执行的情况下也很有用。

所以我想知道,Java 开发人员决定不允许获取 Runnable 是否有特定原因?来自 Thread 的实例,还是值得通知的缺失功能?如果您认为该选择背后没有任何理由,但不值得将其作为缺失功能通知,那么在上述场景中您会使用什么策略?

最佳答案

So I was wondering, is there a specific reason why the Java developers decided to not allow to get the Runnable instance from a Thread

这可能不是必需的。 Runnable本身应该能够识别自己的类,所以它需要获取该信息的想法很奇怪。它也可以是一种保护,以便其他线程无法访问正在另一个线程中运行的类。

如果您需要访问当前的 Runnable从您的应用程序的其他部分,那么我建议使用 ThreadLocal<Runnable> .在你的run()您可以设置它的方法,然后在您的其他类中检索它。你需要把 ThreadLocal然而,在某个全局可访问的地方。

您还可以处理当前堆栈跟踪以找出封闭的 Runnable类更像是一个 hack,但它会工作。

关于java - 为什么不可能将 Runnable 嵌入到线程中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10452998/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com