스레드조정 자바 쓰레드조정 관련 소스 질문입니다
조회수 1013회
전체적으로 돌아가는 상황을 순서대로 좀 알려주세요!! empty true false 상태로 비유해서요!!
1.Buffer 소스
package lect12;
public class Buffer {
private int data;
private boolean empty = true;
public synchronized int get(){
while(empty){
try{
wait();
}
catch(InterruptedException e){
e.printStackTrace();
}
}
empty = true;
notifyAll();
return data;
}
public synchronized void put(int data){
while(!empty){
try{
wait();
}catch(InterruptedException e){
e.printStackTrace();
}
} empty=false;
this.data =data;
notifyAll();
}
}
2.Producer 소스
public class Producer implements Runnable{
private Buffer buffer;
public Producer(Buffer buffer){
this.buffer = buffer;
}
public void run(){
for(int i = 0; i < 10; i++){
buffer.put(i);
System.out.println("생산자: "+i+" 번 케익을 생산하였습니다!!");
try{
Thread.sleep((int)(Math.random()*100));
} catch (InterruptedException e) {
e.printStackTrace();
} } }
}
3.Consumer 소스
package lect12;
public class Consumer implements Runnable{
private Buffer buffer;
public Consumer(Buffer drop){
this.buffer = drop;
}
public void run(){
for(int i = 0; i < 10; i++){
int data = buffer.get();
System.out.println("소비자: "+data+" 번 케익을 소비하였습니다~~");
try{
Thread.sleep((int)(Math.random()*100));
} catch (InterruptedException e) {
e.printStackTrace(); } } }
}
4.ProducerConsumerTest 소스 (메인) package lect12;
public class ProducerConsumerTest {
public static void main(String[] args){
Buffer buffer = new Buffer();
Thread producer = new Thread(new Producer(buffer));
producer.start();
Thread consumer = new Thread(new Consumer(buffer));
consumer.start(); }
}
-
(•́ ✖ •̀)
알 수 없는 사용자
댓글 입력