...省略 
while(true){ 
try{ 
Socket s1 = server.accept(); 
ThreadHandler Thread1=new ThreadHandler(s1); 
Thread1.start(); 
}catch(IOException e){ } 

...省略 
class ThreadHandler extends Thread{ 
ThreadHandler(Socket s1){...} 
public void run(){...} 

我只是把大体的代码写了一下。 
我的问题就是:由于每个线程都是由循环语句产生的,所以对象名也都是 
Thread1,我如何访问其中某个线程,或者说怎么给所有这些线程做个标记呢?哪位高手能告诉我一种思想也可以,谢谢
用ArrayList可以吗?最好能有一段代码例子,不胜感谢

解决方案 »

  1.   

    你有没有特殊需求,需要标记线程的没有
    比如说:线程1,我标记我"1";线程2标记为"2"
    主要就是说你需要根据线程的部分信息来获得对应的线程吗如果不需要,直接放到ArrayList(数组)中就可以了,否则可以考虑带Key的HashMap(线程有点不安全)
    可能需要手动加锁之类的动作
      

  2.   

    //做一个集合(Vector吧),所在类中添加返回此集合的方法
    while(true){  
    try{  
    Socket s1 = server.accept();  
    ThreadHandler Thread1=new ThreadHandler(s1);  //把Thread1加到线程的集合中去.Thread1.start();  
    }catch(IOException e){ }  
    }  
    ...省略  
    class ThreadHandler extends Thread{  
    ThreadHandler(Socket s1){...}  
    public void run(){...}  
    }  
      

  3.   

    ThreadHandler在构造这个类的时候不妨通Socket 中的一值来做一个标记.这样就可以知道了.
    class ThreadHandler 
    {
      String ip="";
      //构造的时候给通过Socket给IP一个值
    }
      

  4.   

    private static HashMap<String,ThreadHandler> map = new HashMap<String,ThreadHandler>();while(true){   
    try{   
    Socket s1 = server.accept();   
    ThreadHandler Thread1=new ThreadHandler(s1);   
    String key = "";
    /**
    *自己根据你线程的部分信息来确定该对象的内容最好不要有重复
    *比如你有多个IP,没有IP一个线程,那么你可以把IP做为KEY内容
    */
    map.put(key,Thread1);
    Thread1.start();   
    }catch(IOException e){ }   
    }   
    ...String key = "";
    ThreadHandler Thread1 = map.get(key);//取得对应的线程
    //注意通过Thread1.getState() 来分析当前线程的状态