class t implements Runnable
先定义一个实现了runnable接口的类Thread t1 = new Thread(new t());
然后定义一个thread问题:
1、如果我有多个thread,那么是不是把thread放到一个arraylist(或者别的什么)里面进行管理?根据thread的id或者位置来决定停止哪个thread?比如根据用户的输入,决定停止哪个Thread。或者就用ThreadGroup?
2、如果我在runnable的类当中设置了一个标志位,如果为真,那么就停止这个thread(比如停止run方法当中的死循环等等),可是,我从Thread类无法获得创建Thread类的Runnable类啊。
public Thread(Runnable target)===》从Thread类,得不到target,因此,如果我把thread管起来,那么就没办法调用target当中的设置标志位的方法。

解决方案 »

  1.   

      貌似jdk文档里有Thread 获取Runnable对象引用的一些方法?
      如果有的话就好办了,没得话,这个问题不好解决...
      

  2.   

    可以建立一个List(当然得加锁),当Thread运行时就往List里面写自己的name,完成是就从List里面删除自己的name.
    这样就可以判断当前有哪些Thread在运行.
    还可以把所有的Thread都放到另一个Class中(例如叫Luancher),由这个Class判定是否运行新的Thread,或者中断已经运行的Thread.
      

  3.   

    public Thread(Runnable target)
    Class clazz = target.getClass();
    这样可以吗
      

  4.   

    如果只是存放Thread对象,用arrayList是可以的,但是为了考虑效率,而且你需要根绝ID查找thread,那么使用Map会更好的查找,同时用arrayList进行删除操作,在很多线程得情况下效率比较低。
    或许你可以不用Runnable,而直接继承Thread,就可以,如果实在要用Runnable接口的话(当然普通得这个方法比较好),那么你是不是可以再上面得容器里存放得不是Thread对象。而是Runnable对象呢,我觉得应该不影响,至于Thread得ID,可以再生成Thread对象后就可以知道了,然后再将Runnable对象放入容器
      

  5.   

    答:
    我在runnable的类当中设置了一个标志位,如果为真,那么就停止这个thread
    这一点,与你的:)===》从Thread类,得不到target,因此,如果我把thread管起来,那么就没办法调用target当中的设置标志位的方法。 
    完全无关的啊
    照样:在runnable的类当中设置了一个标志位,如果为真,则:runnable的类中的run()代码(class t implements Runnable )就停止.
    这样当Thread t1 = new Thread(new t()); 时,它运行的是你的runnable的类中的run(),因此:如果为真,那么这个thread自然就停止了.这个根本就不需要public Thread(Runnable target)===》从Thread类,想得到target啊.   两者之间是没有关系的.
      

  6.   


    你最终目的 不就是要停止线程嘛  用interrupt()这个方法就可以了
    用setName()来标实线程.
      

  7.   

    我知道Thread,想获得taget。。不过貌似不可能。