public class ProducerConsumer{
public static void main(String[] args){
Temp c = new Temp();
Producer p1 = new Producer(c, 1);
Consumer c1 = new Consumer(c, 1);
p1.start();
c1.start();
}
}
class Temp{
private int contents;
private boolean available = false;
public synchronized int get() {
while (available == false){
try {wait();}
catch (InterruptedException e) {}
}
available = false;
notifyAll();
return contents;
}
public synchronized void put(int value){
while (available == true){
try {wait();}
catch (InterruptedException e) {}
}
contents = value;
available = true;
notifyAll();
}
}
class Consumer extends Thread{
private Temp Temp;
private int number;
public Consumer(Temp c, int number) {
Temp = c;
this.number = number;
}
public void run(){
int value = 0;
for (int i = 0; i < 10; i++){
value = Temp.get();
System.out.println("Consumer " + "got: " + value);
}
}
}
class Producer extends Thread {
private Temp Temp;
private int number;
public Producer(Temp c, int number){
Temp = c;
this.number = number;
}
public void run(){
for (int i = 0; i < 10; i++){
Temp.put(i);
System.out.println("Producer " + "put: " + i);
try{
sleep((int) (Math.random() * 100));
}catch (InterruptedException e){}
}
}
}
-----------------------------------------------
라는 글이 달렷고... 분석을하고... 답을 달려는 순간 글이 사라졋....
아까우니 그냥 박제 합니다. ()안의 내용은 다른 질문검색자를 위해 혹시나 해서..
저는 이런 답변을 달고있엇구요.
1. 본문 삭제 금지를 하지 않는다면 답변이 잘 안달릴겁니다. 이유는 찾아보시면 나옵니다.
2. 본인 수준이 얼마나 되는지에 따라 답변 내용이 달라집니다. 얼마나 저 소스를 알고계시는거죠? int 도 모르는지, 쓰레드는 이해한건지에 따라 다르겟죠.
일단 프로그램은 프로덕트에서 집어넣고 컨슈머에서 그 값을 빼오는걸로 보여집니다.
둘다 동시 실행되나 한번에 하나만되게 공통된? 변수 하나 boolean으로 해놔서 false일때 true일때 각각 하나씩만 되네요.
그렇게 1~10 출력하고 또 다시 반복되는걸로 보여집니다.