スレッドIDが長くてこのように機能しないことはわかっています。関数の引数で取得したIDでスレッドを参照するにはどうすればよいですか?
やりたいことが本当にできない。Thread
ただし、関連付けられたスレッド IDまたはクラス自身へのスレッド ID のマップを保持し、Runnable
それを使用して ID を検索することができます。
Thread thread = new MyThread();
thread.start();
idMap.put(thread.getId(), thread);
これを行う正しい方法は、独自のクラスを定義し、スレッド ID の代わりにオブジェクトを処理することです。Runnable
を拡張するのではなく、実装することをお勧めしますThread
。何かのようなもの:
public class MyRunnable impelments Runnable {
public int a;
...
public void run() {
// code run in the thread
synchronized (this) {
this.wait();
}
System.out.println(a);
}
}
次に、次のことができます。
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
...
public void function(MyRunnable runnable, int a) {
synchronized (runnable){
runnable.a = a;
runnable.notify();
}
}
MyRunnable
プロセスをカプセル化するセッターを設定することをお勧めします。
public synchronized void setA(int a) {
this.a = a;
this.notify();
}
別の方法は、スレッドが通知スレッドと共有できるようにしてBlockingQueue
、待機/通知からあなたを救うことです。次に、メイン スレッド (または を呼び出している人function
) がエンティティをキューに入れ、スレッドがそれを引き出します。