Java

자바 thread

0
class Buffer {     private int data; //케익     private boolean empty = true; //케익이 비었음표시     public synchronized int get() //케익을 사는 메소드     {         while(empty)         {             try {           ..

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(); // 소비자를 꺠우기
    
        }
    }
}
class producer extends Thread
{
    private Buffer buffer;
    public producer(Buffer buffer)
    {
        this.buffer=buffer;
    }
    public void run()
    {

        for(int i=1; i<=10; i++)
        {
            buffer.put(i); //생산
            System.out.println("생산자"+i+"번째 케익을 생성하였습니다");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class cusumer extends Thread
{
    private Buffer buffer;
    public cusumer(Buffer buffer)
    {
        this.buffer=buffer;
    }
    public void run()
    {
        int data = 0;
        for(int i=1; i<=10; i++)
        {
            data=buffer.get(); //소비
            System.out.println("구매자"+data+"번째 케익을 소비하였습니다");
    
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                
            }
        }
    }
}
public class Test1 {

    public static void main(String[] args) {
        Buffer obj = new Buffer();
        producer p1 = new producer(obj);
        cusumer c1 = new cusumer(obj);
        
        p1.start();
        c1.start();
    }

}
 

소비자가 나오지 않습니다.

iismal 2020-12-07
+
iismal 님께서 2020-12-07에 Java에 올린 질문

댓글

1개의 답변

2
package sample01; class Buffer {     private int data; //케익     private boolean empty = true; //케익이 비었음표시     public synchronized int get(int data) //케익을 사는 메소드       

package sample01;

class Buffer
{
    private int data; //케익
    private boolean empty = true; //케익이 비었음표시
    public synchronized int get(int data) //케익을 사는 메소드        <----케잌이 생산되면 케잌인자 주기(int data)
    {
        while(!empty) <--------------케잌이 있으면 소비자들이 살수 있도록 변경(empty=>!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(); // 소비자를 꺠우기
    
        }
    }
}
class producer extends Thread
{
    private Buffer buffer;
    public producer(Buffer buffer)
    {
        this.buffer=buffer;
    }
    public void run()
    {

        for(int i=1; i<=10; i++)
        {
            buffer.put(i); //생산
            System.out.println("생산자"+i+"번째 케익을 생성하였습니다");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
class cusumer extends Thread
{
    private Buffer buffer;
    public cusumer(Buffer buffer)
    {
        this.buffer=buffer;
    }
    public void run()
    {
        int data = 0;
        for(int i=1; i<=10; i++)
        {
            data=buffer.get(i); //소비                 <------------소비자 인원증가의 i 추가

                                                             <-------public synchronized int get(int data) 위에 파라미터 줌
            System.out.println("구매자"+data+"번째 케익을 소비하였습니다");
    
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
                
            }
        }
    }
}
public class sample01 {

    public static void main(String[] args) {
        Buffer obj = new Buffer();
        producer p1 = new producer(obj);
        cusumer c1 = new cusumer(obj);
        
        p1.start();
        c1.start();
    }

}

슈퍼파워 2022-07-23
사탕 주기
슈퍼파워 님께서 2022-07-23에 Java에 올린 글
보관하기

댓글

조회수 909
답글 1
URL