自从我用 Java 编程以来已经有一段时间了,我想刷新一些理论。
如何从头开始实现自己的 ThreadLocal?
是的。您可以对线程进行子类化并在 Thread 的源代码中复制实现。或者您可以只阅读代码,但正确获取 ThreadLocal 是很棘手的。
有许多棘手的元素,最明显的是防止未删除的线程导致内存泄漏。
即使是现有的实现也存在子类化 ThreadLocal 对象会阻止 ClassLoader 卸载的问题。
试试这个:
new Thread()
{
//contents
}.start();
您可以在代码中的任何位置生成它。
原来这个问题是重复的:
这很简单,实际上,它只是存储在每个 Thread 对象中的名称-值对的 Map(请参阅 Thread.threadLocals 字段)。API 隐藏了实现细节,但这或多或少是它的全部。