当前位置: 首页 > 知识库问答 >
问题:

如何创建线程的引用,以及对ThreadLocal的验证

越开畅
2023-03-14

我正在寻找关于ThreadLocal的以下使用的验证。

我有一个服务,比如说ServiceA在一组进程上运行,比如系统中的processSetX。哪个processSetX将在ServiceA上运行直到运行时才知道,并且可能会有所不同。processSetX中的进程可以在不同的线程上运行<代码>服务a必须以相同的方式识别processSetX中的所有进程。

为此,我应该将一个ID值(比如String类型)写入一个新线程的线程本地存储(TLS),然后在需要时读取该值。因此,调用ServiceA的第一个线程的ID将是ServiceA识别它们的ID。当第一个线程启动另一个线程时,它将进入这个新线程的TLS并写入这个ID。从那里开始,这个链中的每个线程都将把这个ID传递给新线程。

我希望验证ThreadLocal是解决这个问题的方法。

我以前没用过它-我想确定一下。

TIA

//==================

编辑:

有没有办法获取调用线程的引用?

eg.:

一个线程,比如说threadX正在调用,比如说methodA()。有没有办法让methodA()知道是谁在调用它?如果是这样-methodA()能够调用threadX的getter方法从其线程本地存储中读取值。

短暂性脑缺血发作

//=================

编辑-2:

Thread.currentThread()返回类似于Thread[main,5,main]的内容。这可能会在线程之间发生冲突。

共有1个答案

元望
2023-03-14

我认为首先,你只需要一个普通的成员变量。

例如:

// 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)
 类似资料:
  • 问题内容: 抱歉,这个问题很愚蠢。我试图在网上找到答案已有一段时间,但找不到,因此我在这里提问。我正在学习线程,并且一直在浏览此链接以及有关内核级和用户级线程的2013年Linux Plumbers Conference 2013视频 ,据我了解,使用pthreads在用户空间中创建线程,而内核并不知道关于此问题,并且仅将其视为单个进程,而不知道内部有多少个线程。在这种情况下, 内核在将进程视为时

  • 在进程获得的时间间隔内,谁决定这些用户线程的调度,因为内核将其视为单个进程,并不知道线程,调度是如何完成的? 如果pthreads创建用户级线程,如果需要,如何从用户空间程序创建内核级或OS线程? 根据上面的链接,它说操作系统内核提供系统调用来创建和管理线程。那么,系统调用是创建内核级线程还是用户级线程呢? 如果它创建了一个内核级线程,那么简单pthreads程序的也会显示在执行时使用clone(

  • 问题内容: 在代码中: 现在,将是7,x将是8。但是实际上,我想改变。我可以分配引用吗? 例如,在C ++中,可以达到以下目的: 现在,这两个&将是9 问题答案: 你不能。正如其他答案指出的那样,您可以(ab?)使用可变对象的别名来达到类似的效果。但是,这与C ++参考不是同一回事,我想解释一下为避免误解而实际发生的情况。 您会看到,在C ++(和其他语言)中,变量(以及对象字段以及集合中的条目等

  • 本文向大家介绍理解iOS多线程应用的开发以及线程的创建方法,包括了理解iOS多线程应用的开发以及线程的创建方法的使用技巧和注意事项,需要的朋友参考一下 一、进程和线程 1.什么是进程   进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ、Xcode,系统就会分别启动2个进程 通过“活动监视器”可以查看Mac系统中所开启的进程

  • 我试图获得对创建java的GoogleMap对象的引用,但我不知道如何获得这个引用。

  • 本文向大家介绍如何创建线程池 ?相关面试题,主要包含被问及如何创建线程池 ?时的应答技巧和注意事项,需要的朋友参考一下 在《阿里巴巴 Java 开发手册》“并发处理”这一章节,明确指出线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。 为什么呢? 使用线程池的好处是减少在创建和销毁线程上所消耗的时间以及系统资源开销,解决资源不足的问题。如果不使用线程池,有可能会造成系统创建大量同类线程而