0

我想知道某个线程的实例是否正在运行,以便我可以使用它。这可能吗?我该怎么做?有什么策略或建议吗?

例如说我有这个线程:

public class SomeThread extends Thread{
      ArrayList<String> stringArray=new ArrayList<String>();
      public void run(){
      //some long time operation or messaging going on
     }
     public ArrayList<String> getList(){
     return stringArray;
    }

}

public abstract class AnyActivity{
  @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
                if(//any an instace of SomeThread exist){
                ArrayList<String> array=//somehow.getList();
                } else {
                SomeThread thread=new SomeThread();
                thread.setPriority(Thread.MAX_PRIORITY);
                thread.start();

        }

}

编辑1:我不想传递线程的引用,因为这可能是我启动它的唯一地方。认为 SomeThread 具有重要意义并从应用程序开始。我需要通过Messenger's 询问它,否则它可能会告诉活动以相同的方式做某事。我已经更新了示例代码并设置了 AnyActivity 抽象。应用程序中的所有活动都扩展了这个类,所以我不知道线程是否已经创建和启动,这意味着我不能依赖引用。

所以我无法使用thread.isAlive()并且没有静态方法SomeThread.isAlive()。我可以setName()在线程内部使用,但是之后如何通过它的名称找到它?

4

5 回答 5

1

找到了解决办法,谢谢指导

private SomeThread getSomeThread(){
    Thread thread=null;
    int i=0;

    Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
    Thread[] threadArray = threadSet.toArray(new Thread[threadSet.size()]);
    while(thread==null && i<threadArray.length){
        if(threadArray[i].getName().equals(SomeThread.class.getSimpleName()))
            thread=threadArray[i];
        i++;
    }

    return (SomeThread)thread;  
}
于 2013-04-28T11:46:58.400 回答
0

您需要稍后/进一步将您感兴趣的线程的引用传递给您的代码,然后使用以下命令对其进行测试:

  Thread t; t.isAlive();

PS您可以准确地告诉使用您想要做什么,也许我们可以为您提供更多帮助。

于 2013-04-27T13:18:23.737 回答
0

thread.isAlive()是你的朋友:http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html#isAlive()

于 2013-04-27T13:19:33.937 回答
0

尝试这个

获取当前在 Java 中运行的所有线程的列表

您还可以通过其名称或 ID 获取线程

http://nadeausoftware.com/articles/2008/04/java_tip_how_list_and_find_threads_and_thread_groups#Gettingathreadbyname

于 2013-04-27T13:19:59.910 回答
0
 if( SomeThread.isAlive())
 {
       // in running state 
 }

isAlive( ) 方法在运行时返回 true,否则返回 false

于 2013-04-27T13:20:04.033 回答