そのようなコードが安全かどうかはわかりません。DBから名前を読み取る必要があります。たとえば、10個のスレッドを使用する必要があります。各スレッドは名前を取り、その中でrun
この名前を引数として必要とする関数を呼び出します。
10スレッドは8GBのRAMを搭載したIntelコアi7を実行しているPCに適した数ですか?作成できるスレッドの許容数を知るにはどうすればよいですか?このコードは正しく安全ですか?
私はディーテルの本で、彼らがエグゼキューターの前に新しいスレッドを作成していることを発見しました。彼らは次のような行を追加します:PrintTask task1 = new PrintTask( "thread1" );
チェック:http ://www.deitel.com/articles/java_tutorials/20051126/JavaMultithreading_Tutorial_Part4.html )、ただし、以下のメソッド(新しいステートメントなし)をhttp://www.vogella.com/articles/JavaConcurrency/で見つけてください。 article.html
つまり、ループの前に作成する必要がありますか?2つの参照は異なる方法を使用しており、私は混乱しています。正しいコードは次のとおりです。
ExecutorService Executor = Executors.newFixedThreadPool(10);
while(resultSet.next())
{
name=resultSet.getString("hname");
MyRunnable worker = new MyRunnable(name);
Executor.execute( worker );
Counter++;
}
Executor.shutdown();
System.out.println("thread shutdown");
// Wait until all threads are finish
while (! Executor.isTerminated()) {
}
System.out.println("Finished all threads");
また
MyRunnable task1 = new MyRunnable(name );
MyRunnable task2 = new MyRunnable(name );
MyRunnable task3 = new MyRunnable(name );
MyRunnable task4 = new MyRunnable(name );
MyRunnable task5 = new MyRunnable(name );
MyRunnable task6 = new MyRunnable(name );
MyRunnable task7 = new MyRunnable(name );
MyRunnable task8 = new MyRunnable(name );
MyRunnable task9 = new MyRunnable(name );
MyRunnable task10 = new MyRunnable(name );
ExecutorService Executor = Executors.newFixedThreadPool(10);
while(resultSet.next())
{
name=resultSet.getString("hname");
MyRunnable worker = new MyRunnable(name);
Executor.execute( worker );
Counter++;
}
Executor.shutdown();
System.out.println("thread shutdown");
// Wait until all threads are finish
while (! Executor.isTerminated()) {
}
System.out.println("Finished all threads");
また、runを実装するMyRunnableクラスのコンストラクターで、スレッドを明示的に開始する必要がありますか、それともExecutor.execute( worker )
この場合は十分に実行しますか。