В этой многопоточной программе потоки «t1» и «t2» пытаются выполнить синхронизированный метод printTable()
на том же объекте obj. Когда t1 запускается и printTable()
вызывается из его метода run()
, t2 должен ждать, пока t1 не закончит выполнение синхронизированного метода; почему этого не происходит? Почему выходные данные несортированы?Почему метод не получает доступ синхронно по потокам в этой программе Java?
Вот программа:
class Table{
void printTable(int n){//synchronized method
for(int i=1;i<=5;i++){
System.out.println(n*i);
try{
//Thread.sleep(400);
}catch(Exception e){System.out.println(e);}
}
}
}
public class TestSynchronization3{
public static void main(String args[]){
final Table obj = new Table();//only one object
Thread t1=new Thread(){
public void run(){
obj.printTable(5);
}
};
Thread t2=new Thread(){
public void run(){
obj.printTable(100);
}
};
t1.start();
t2.start();
}
}
Вы никогда не использовали ключевое слово 'synchronized' для объявления метода как синхронного – Michael