하나의 스레드가 한 개체 (이 경우 objsyn)에서 동기화 된 메서드를 호출하면 스레드가 개체와 함께 완료 될 때까지 다른 모든 스레드가 대기해야하므로 5 개의 스레드를 만들려고했습니다. 따라서 출력은 스레드 1에서 스레드 5까지 순서대로 이루어져야합니다. 그러나 출력이 잘못되어 있습니다.동기화 방법
class synctest extends Thread
{
public synchronized void display()
{
try{Thread.sleep(5000*((long)(Math.random())));}
catch(Exception e){}
System.out.println("From synchornized thread "+ Thread.currentThread().getName());
}
public synchronized void run()
{
synctest objsyn = new synctest();
objsyn.display();
}
public static void main(String args[])
{
synctest objsy = new synctest();
Thread t1 = new Thread(objsy,"Thread 1");
Thread t2 = new Thread(objsy,"Thread 2");
Thread t3 = new Thread(objsy,"Thread 3");
Thread t4 = new Thread(objsy,"Thread 4");
Thread t5 = new Thread(objsy,"Thread 5");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
}
}
스레드가 일정하지 않은 시간에 시작됩니다. 'start()'메소드를 호출하는 순서는 그 안에 하나의 요소에 불과하다. 결함이있어 설계를 재고해야합니다. – allprog