はい、動作しますが、これを達成し、コードを理解しやすくするために、他のいくつかの方法を検討することをお勧めします。Runnable
たとえば、メイン クラスから呼び出す2 番目のクラスを作成できます。
public class Mindblower {
public static void main(String[] args) {
Thread ownThread = new Thread(new MindblowingRunnable());
ownThread.start();
// Other stuff that you want done concurrently on the main thread
}
private class MindblowingRunnable implements Runnable {
@Override
public void run() {
// Stuff to be carried out in your thread
}
}
}
クラスが public である必要がないRunnable
限り、 がそのコンテキストでのみ使用される場合、これを少し簡単にすることができます。Runnable
public class Mindblower {
public static void main(String[] args) {
Thread ownThread = new MindblowingThread();
ownThread.start();
// Other stuff that you want done concurrently on the main thread
}
private class MindblowingThread extends Thread {
@Override
public void run() {
// Stuff to be carried out in your thread
}
}
}
スレッドへのローカル参照を保持できますが、これはメイン スレッドから割り込みが必要な場合にのみ役立ちます。内からRunnable
、 を呼び出すだけThread.currentThread()
です。
おまけの質問についてstart()
は、コンストラクターから、または から呼び出す必要はありませんmain()
。これらはどちらも、プログラムの開始直後にスレッドを実行したい場合のオプションですが、場合によっては、最初にユーザー入力を待って、start()
他のメソッドから呼び出したい場合があります。
これはすべて、単一のスレッドのみを作成していること、または複数のスレッドがある場合、それらの間の同期がプログラムにとって問題にならないことを前提としています。同期が重要な場合は、代わりにスレッド プールを検討してください。