以下のコードでは、メソッドを同期するかどうかにかかわらず、出力に違いはありませbar
ん-何が間違っているのですか?「bar」を同期すると「ThreaOne」が10回印刷され、「ThreadTwo」の印刷のみが開始されると思いますが、そうではありません。私が得る出力は次のとおりです。
私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッドOneOneOneOne 私は今メインにいます 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッドOneOneOneOne 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッド2 私はテストスレッドです:スレッド2 私は今メインにいます
等々。これが私のコードです:
package com.rahul;
class ThreadTest implements Runnable{
@Override
public void run() {
bar();
}
public synchronized void bar() {
for(int i=0;i<10;i++){
System.out.println("I am Test thread:"+Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class Test{
public static void main(String[] args) {
Thread t1 = new Thread(new ThreadTest(),"Thread OneOneOneOne");
Thread t2 = new Thread(new ThreadTest(),"Thread Two");
t1.start();
try{
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
t2.start();
while(true){
System.out.println("I am in main now");
try {
t2.join();
Thread.sleep(4000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}