- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个在执行 Runnable 时使用的非线程安全对象。然而,这个对象的创建成本很高,并且在每个 Runnable 中创建它们会导致太多的开销。相反,我希望 ThreadPoolExecutor 使用我的自定义线程,该线程有一个额外的字段,并在同一线程中运行的 Runnable 实例之间共享该字段。
我创建了具有自定义字段的自定义 Thread 类。我像这样创建 ThreadPoolExecutor:
executor = new ThreadPoolExecutor(5, 50, 0, TimeUnit.MILLISECONDS, new LinkedBlockingQueue(), new CustomThreadFactory())
CustomThreadFactory 在 newThread(Runnable r)
方法中创建我的自定义线程。但是,为了在 Runnable 实例中使用该字段,我还需要创建自定义 Runnable,它获取非线程对象的引用并将其保存以便在 run() 方法中使用。
但是,由于 ThreadPoolExecutor 使用 Workers 来执行 Runnable 实例,因此我无法将非线程安全对象调用到 Runnable 实例。有没有任何方便的方法可以使用 ThreadPoolExecutor 执行此类操作,或者我是否需要创建自定义 ThreadPoolExecutor?
最佳答案
只是为了将此问题标记为已回答:
如果没有其他原因让您使用自定义线程工厂(例如提供自定义线程名称),那么 ThreadLocal 是首选方式。它完全符合您对想要实现的目标的描述。
关于java - 使用 ThreadPoolExecutor 在同一线程中的 Runnable 实例之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450712/
有很多可用的单行 HTTP 服务器,例如 python python -m SimpleHTTPServer 8000 ruby ruby -run -ehttpd . -p8000 等等 是否有任何
我是一名优秀的程序员,十分优秀!