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、アクティビティに同じ方法で何かを行うように指示する可能性があります.サンプルコードを更新し、AnyActivity抽象を設定しました.アプリケーションのすべてのアクティビティはこのクラスを拡張するので、私はしませんスレッドが以前に作成および開始されたかどうかを知っているため、参照に頼ることはできません。

だから私は働くthread.isAlive()ことができず、静的メソッドはありませんSomeThread.isAlive()。スレッド内で使用setName()できますが、後でその名前で見つけるにはどうすればよいですか?

4

5 に答える 5

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 に答える