Java 内有线程的HashMap

Java 内有线程的HashMap,java,multithreading,hashmap,Java,Multithreading,Hashmap,请看一下代码和图片。我想组织一个线程池。当我打印ThrdPool的内容时,线程的所有ID都等于1。我不知道该怎么办。我想这是因为变量的范围。在addHotThrd()方法中,我创建了新的HotThrd(引用类型)。在区块外,所有参考都将被取消。你能帮我组织一个具有未知线程数的哈希映射吗 public ThrdPool(int hotThrds, long timeout) { this.freeThreadsMap = new HashMap(0); this

请看一下代码和图片。我想组织一个线程池。当我打印ThrdPool的内容时,线程的所有ID都等于1。我不知道该怎么办。我想这是因为变量的范围。在addHotThrd()方法中,我创建了新的HotThrd(引用类型)。在区块外,所有参考都将被取消。你能帮我组织一个具有未知线程数的哈希映射吗

  public ThrdPool(int hotThrds, long timeout) {
        this.freeThreadsMap = new HashMap(0);
        this.hotThreadsMap = new HashMap(0);
        this.hotThreads = hotThrds;
        this.timeout = timeout;

        for (int i = 0; i < hotThreads; i++) {            
            addHotThrd();
        }
    }

    public long addHotThrd() {
        HotThrd newThrd = new HotThrd();
        hotThreadsMap.put(newThrd, newThrd.getId());        
        return newThrd.getId();
    }
public ThrdPool(int hotThrds,长超时){
this.freeThreadsMap=newhashmap(0);
this.hothreadsmap=新HashMap(0);
this.hotthres=hotThrds;
this.timeout=超时;
对于(inti=0;i
假设您的HotThrd类扩展了Thread类,您可以在初始化期间设置线程的名称

class HotThrd extends Thread{
   HotThrd(String name){
      super(name);
   }
}

....
....
public long addHotThrd(int i) {
    HotThrd newThrd = new HotThrd("Thread"+i);
    hotThreadsMap.put(newThrd, newThrd.getId());        
    return newThrd.getId();
}

分享HotThrd的实现。你能澄清我应该做什么吗。现在我只想启动几个独立的线程,目前还不需要同步。为什么不能使用thread.setName(“XXX”)?它也将有助于您的日志记录。。