ドキュメントの説明と同様に、新しいスレッドを作成したい別のスレッドが必要な場合は、スレッドをクローンするのは意味がありません。
スレッドをクローンしたい場合は、Runnableを実装する必要があるスレッドを拡張したか、そうでない場合はドメインオブジェクトを何らかの方法でスレッドに結びつけることができます。例えば、人々はRunnableを実装するクラスを作成し、その後、このように、このクラスのインスタンスメンバーとしてスレッドを作成不幸なアンチパターンがあります:
// Example of anti-pattern, please don't do this!
class MyTask implements Runnable {
private Thread thread;
public void start() {
thread = new Thread(this);
thread.start();
}
public void run() {
// whatever code your task performs
}
}
これは盲目的に次の偉大な例ですBEST-そのポイントを完全に逃してしまうような練習をする。表面的には、これはThreadをサブクラス化するのではなくRunnableを実装するアドバイスに従っていますが、実行する特定のThreadにタスクを関連付けることは、そのアドバイスの目的を破ります。
独立して実行する必要があるタスクや非同期に実行する必要があるタスクについては、スレッドのことを知る必要はありません。その代わりに、Executorサービスによって実行できるように設計する方がよいでしょう。 RunnableとCallableの2つのインタフェースが用意されています。これらのインタフェースは、スレッドをサブクラス化するのではなく、特定の実行手段に結び付けない方法でタスクを指定できるようにするために用意されています。特定のThreadオブジェクト。そうすれば、タスクを変更せずに実行方法を自由に変更することができます。また、スレッドが関与しないため、クローン可能なタスクを自由に作成できます。
スレッドをクローンする方法は? – Kayaman
ThreadとしてのCloneNotSupportedExceptionを意味的にクローンにすることはできません。 https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#clone() – PVR
なぜスレッドをクローンする必要がありますか?現在実行中のスレッドをクローンすると、セマンティクス(結果)はどうなるでしょうか?モニタを保持しているスレッドをクローンしたら?あなたはおそらくさらに興味深い質問を見つけることができます。 –