2016-05-31 4 views
-1

実行可能なスレッドを持つクラスがあります。私は同時にこのクラスに変数を複数回送信します。クラスはrun()メソッドを持ち、別のクラスから送られた変数のスレッドを開始します。 いくつかのプロセスの後で、私は割り込みでスレッドを停止する必要がありますが、私は(MyThread.interrupt()などの)停止したいスレッドの名前をspesifyする必要があります。問題は、毎回同じオブジェクト名のスレッドをクラスに作成することです。だから、私はこのスレッドオブジェクトを毎回別々に名前をつけて、その名前で止める必要があります。しかし、私は知りません..これは私のコードです。別のクラスでスレッドに複数回名前を付けてJavaで使用する方法

public class KasaThread { 

public static Thread till ; 

public static String [] table_list_kasa; 


public static void get (final String IP,final String MagID){ 


    till = new Thread() { 



      public void run() { 


       if(IP != null){ 


       try{ 
        ... 
        ... 
        ... 
        }catch(Exception e} {} 

、私は(till.interrupt())のような名前で、このスレッドを中断... しかし、私が言ったように、このクラスで作成されたすべてのスレッドは、(まで)同じ名前を持ちます。

これを解決するにはどうすればよいですか?

ありがとうございます。

答えて

1

私はこの問題をmethodssetName(String name)getName() +いくつかのカウンタで解決できると思います。

+0

'Thread'クラスで' String'をとる 'getName'はありません。また、私はこれがどのように問題を解決するのか分かりません。はい、スレッドに名前を付けますが、スレッドにアクセスする方法はありません。 – Oebele

+0

よく、はい、私はこれを意味します: 'for(スレッドスレッド:スレッド){if(thread.getName()。equals(" yourName "))thread.interrupt();}'あるいは、そこからあなたのスレッドを制御してください – mrserfr

+0

はいこのようにしています。私はマップを作成し、末尾に数字を追加して(till1、till2など)スレッドの名前を変更し、スレッドの名前をマップに入れます。しかし、私はそこからどのように呼び出すのですか?私はtill2.interrupt()を使う必要がありますが、ThreadではなくStringとしてvarillableを持っています。 –

0

ArrayListまたはLinkedListにスレッドを配置できます。実際に名前でアクセスできるようにしたい場合は、Map<String, Thread>を使用します。

すべてのスレッドを同時に停止しますか?その場合は、そのクラスにstop()メソッドを追加することができます。これはおそらく、次のようになります。あなたがコントロールすることができますので、これに

public void stop() { 
    for (Thread thread : threads) { 
     thread.interrupt() 
    } 
} 
1

ソリューションは、他のクラスではHashMapの(またはあなたがスレッドの好きな他のID)を保持し、この1つはRunnableを実装させることになります他のクラスのあなたのスレッド。

+0

はいこのようにしています。私はマップを作成し、末尾に数字を追加して(till1、till2など)スレッドの名前を変更し、スレッドの名前をマップに入れます。しかし、私はそこからどのように呼び出すのですか?私はtill2.interrupt()を使う必要がありますが、ThreadではなくStringとしてvarillableを持っています。 –

+0

この 'myMap.get(VAR_NAME +" 1 ")。interrupt()'のようなものは、クラス内の属性として定義されたVAR_NAMEである必要があります。 "till"が必要ない場合は、マップを整数に変更してその番号で参照するだけです –

+0

作成した後に変更するのではなく、毎回異なる名前のスレッドを作成しますか? till1 = new Thread()のように。 till2 = new Thread()...作成中に変数名を変更できないのですか? –

関連する問題