我正在寻找关于以下ThreadLocal用法的验证。
我有一个服务,比如在系统中的一组进程上运行的ServiceA
。哪个processSetX
将在ServiceA
上运行直到运行时才知道,可能会有所不同。processSetX
中的进程可以在不同的线程上运行。ServiceA
必须以相同的方式识别processSetX
中的所有进程。
为此,我应该将一个ID值写入到新线程的线程本地存储(TLS)中,并在以后需要时读取此值。因此,调用ServiceA
的第一个线程的ID将是ServiceA
识别它们的ID。当第一个线程启动另一个线程时,它将转到这个新线程的TLS上并写入这个ID。从那时起,这个链中的每个线程都会将这个ID传递给新的线程。
我正在寻求验证ThreadLocal是解决这一问题的方法。
我以前没有用过它--我想确认一下。
蒂娅。
//=
编辑:
有没有办法获取调用线程的引用?
例如:
一个线程,假设threadX
正在调用,比如说methodA()
。有没有办法让methodA()
知道“谁”在召唤它?如果是这样的话- methodA()
能够调用threadX
的getter方法来从其线程本地存储中读取值。
提亚
//=
编辑-2:
Thread.currentThread()
返回类似于Thread[main,5,main]
的内容。这可能会在线程之间发生冲突。
发布于 2015-03-25 21:39:10
我认为首先,你只需要一个普通的成员变量。
例如:
// Thread
public class CalledThread extends Thread {
public String myId;
public void run() {
....
// Caller
CalledThread t = new CalledThread();
t.myId = "the thread ID";
t.start();
但是,一旦开始调用服务类,就无法访问myId
,因此可以使用ThreadLocal
。
在CalledThread
中,将myId
分配给run
中的ThreadLocal
。
threadLocal.set(myId)
https://stackoverflow.com/questions/29264019
复制相似问题