私は、他のメソッドからの操作を ConcurrentLinkedQueue にキューに入れ、キューを処理する作成スレッドからのみ呼び出す必要がある process() メソッドを持つクラスを作成しています。これは、他のメソッドの操作を他のスレッドから呼び出すことができるためですが、実際のアクションは作成者スレッドでのみ実行する必要があります。これは、UI スレッドの外部で UI コードを実行するために使用する必要があるAndroid のrunOnUiThreadに似ています。
process メソッドについての私の考えは、最初に作成者スレッドがそれを呼び出していることをアサートし、次に単純にそれぞれをキューで実行することです。現在のスレッドを保存されている Thread 参照と比較する方法がわかりません。参照が同じであることが保証されているかどうかについてのドキュメントが見つかりません。equals
メソッドを使用する必要がありますか?==
演算子を使用する必要がありますか?Thread オブジェクトを比較することはできますか? または、それらの名前やその他のデータを比較する必要がありますか?
関連するコードは次のようになります: (キューのロジックは示されていません)
public class MultiThreadTasker {
private Thread creatorThread;
public MultiThreadTasker() {
creatorThread = Thread.currentThread();
}
public void process() {
if(Thread.currentThread() != creatorThread) {
throw new IllegalArgumentException("...");
}
// ...
}
// ...
}
これを行うための代替方法の推奨事項も歓迎します。Executor を再発明しているように見えますが、独自のスレッドを処理する代わりにタスクの実行を手動で開始できる Executor は見当たりませんでした。