SyncTest.java
import java.util.*;
class SyncStack {
private Vector buffer = new Vector();
public synchronized char pop() {
char c;
while(buffer.size()==0) {
try{
System.out.println("stack´ë±â:");
this.wait();
}catch(Exception e){}
}
Character cr = ((Character)buffer.remove(buffer.size()-1));
c = cr.charValue();
System.out.println("stack»èÁ¦:" + c);
return c;
}
public synchronized void push(char c) {
this.notify();
Character charObj = new Character(c);
buffer.addElement(charObj);
System.out.println("stack»ðÀÔ:" + c);
}
}
class PopRunnable extends Thread {
public void run(){
SyncTest.ss.pop();
}
}
class PushRunnable extends Thread {
private char c;
public PushRunnable(char c) {
this.c =c ;
}
public void run() {
SyncTest.ss.push(c);
}
}
public class SyncTest {
public static SyncStack ss =new SyncStack();
public static void main(String[] args) {
//SyncStack¿¡ 5µ¥ÀÌÅÍ»ðÀÔ
new PushRunnable('J').start();
new PushRunnable('A').start();
new PushRunnable('B').start();
new PushRunnable('O').start();
new PushRunnable('O').start();
new PopRunnable().start();//O
new PopRunnable().start();//O
new PopRunnable().start();//B
new PopRunnable().start();//A
new PopRunnable().start();//J
new PopRunnable().start();//´ë±â»óÅÂ
try {
Thread.sleep(5000);
}catch(Exception e){}
System.out.println("===== passed 5 seconds======");
new PushRunnable('K').start();
}
}
C:\examples\10.Objec>javac SyncTest.java
C:\examples\10.Objec>java SyncTest
stack»ðÀÔ:J
stack»ðÀÔ:A
stack»ðÀÔ:B
stack»ðÀÔ:O
stack»ðÀÔ:O
stack»èÁ¦:O
stack»èÁ¦:O
stack»èÁ¦:B
stack»èÁ¦:A
stack»èÁ¦:J
stack´ë±â:
wait()¸Þ¼µå´Â ½º·¹µå°¡ µ¿±âÈµÈ °øÀ¯ÀÚ¿øÀ» ¿äûÇÒ ¶§ ½º·¹µå¸¦ ´ë±â»óÅ·Π¸¸µé¾î ÁÝ´Ï´Ù.
notify(), notifyAll()¸Þ¼µå´Â ´ë±âÁß¿¡ ÀÖ´Â ½º·¹µå(µé)¿¡°Ô µ¿±âÈµÈ °øÀ¯ÀÚ¿øÀ» ¾µ ¼ö ÀÖµµ·Ï ½º·¹µå¿¡°Ô ¾Ë¸®´Â ¿ªÇÒÀ» ÇÕ´Ï´Ù.
jabookÀúÀÚ¸íÇÔ |
Á¦¸ñ:¼Ò¼³°°Àº¹Ì´ÏÄÚµå ÀÛ¼ºÀÚ:Àںϸâ¹ö ÇÑâÇå |