にスレッドを作成するとき、私は10回ループで10個のスレッドを作成しよう、と私はこの方法で同期を割り当てなかったとき、競合がプリントアウト見たいと思って本当の複数のスレッドです。 これは私のコードの下は、私がループ
public class SingletonService {
private static SingletonService singleton = null;
public static SingletonService getInstance() {
if (singleton == null) {
synchronized(SingletonService.class) {
if (singleton == null) {
singleton = new SingletonService();
return singleton;
}
}
}
return singleton;
}
public void testMethod() {
boolean flag = true;
System.out.println("start");
if (flag == false) {
System.out.println(">>>>>>>>>>>>>>>Error");
}
flag = false;
System.out.println("over");
}
}
のは、サービスを受けるとのtestMethod()を呼び出すスレッドですたくさんある私を混同
public class Transferable extends Thread {
private SingletonService service = null;
public Transferable(SingletonService aService) {
service = aService;
}
public void run() {
System.out.println("Service Start");
service.testMethod();
System.out.println("Service End");
}
}
今では私は、内のスレッドを作成しようとすると、次いで、callMethod()は、サービスにsequencelly実行され、互いに影響を及ぼさないであろう(また、エラーメッセージが投げ出されることはありません)
for (int i = 0; i < 10; i ++) {
Transferable t1 = new Transferable(service);
t1.run();
Thread.sleep(10);
}
様ループ
しかし、私はエラーメッセージが... いずれかが教える私の問題を解決するために助けることができ、プリントアウトして、開始末端配列も障害となっている
Transferable t1 = new Transferable(service);
Transferable t2 = new Transferable(service);
Transferable t3 = new Transferable(service);
Transferable t4 = new Transferable(service);
Transferable t5 = new Transferable(service);
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
のように手動でスレッドを作成しよう詳細? おかげ^ BR
'のThread.sleep(10);'これは十分な時間 –
であるあなたは*あなたのループ* *は、それらを実行する方法と比較して、手で*あなたのスレッドを開始する方法の違いを参照していますか? – amalloy
真実を伝えるには...私は、ループ実行時のスレッドが、常に新しいスレッドをt1にポイントするたびに、特定のスレッドを永久に実行するのではないかと疑います。JVMは新しい参照を開始する前に実行を強制終了します – Lobs