2012-05-11 15 views
1
Thread runnableInst = new Runnable(){ public void run(){}}; 

Thread thread1 = new Thread(runnableInst); 
Thread thread2 = new Thread(runnableInst); 

thread1.start(); 
thread2.start(); 

同じObject runnableInstで2つのスレッドを開始するのはいいですか?Runnableの同じインスタンスを渡して2つのスレッドを作成する

このようなデザインを作るのは良いですか?

+0

'Thread runnableInst = new Runnable(){public void run(){}};'スレッドはすでに 'Runnable'です。これは混乱するコードです.. – CKing

答えて

2

はい、これを行うことができますが、どちらのスレッドもrunnableInstのインスタンスデータにアクセスすることがあります。したがって、必要に応じてアクセスが同期されていることを確認する必要があります。

+0

変数が厳密にローカル変数である場合、これは他のスレッドに影響しません。それぞれに独自のメソッドスタックがあり、したがって独自の変数が必要です。 – Dale

1

これは問題ありません。ただし、多くの並列タスクをディスパッチする予定がある場合は、ExecutorService APIを使い始めることをお勧めします。

0

確かに可能です。私はそれが大部分の状況で良いデザインではないと思います。 Runnableのインスタンスは、明確で安全な方法で他のスレッドとデータを共有するだけのコードであると考えています。

+0

もう少し洞察を加えたり、可能であれば、いくつかのリンクを教えてください。 –

+0

これは大きな話題です。 Javaの並行処理に興味がある場合は、Java Concurrency in Practiceを読む必要があります。この分野の本です –

0

同じObject runnableInstで2つのスレッドを開始するのはいいですか?

はい、同じObject runnableInstで2つのスレッドを開始しても問題ありません。

このような設計をするのは良いですか?ユースケースによって異なります。たとえば、共有リソースに読み書きに関連するものがない場合、これは良い設計です。

関連する問題