값이 비워있으면 채워넣고 값이 있으면 출력하는 것을 만들기 get / set

조수경·2021년 11월 15일
0

고급자바

목록 보기
35/97
package kr.or.didt.basic;

//값이 비워있으면 채워넣고 값이 있으면 출력하는 것을 만들기


public class ThreadTest20 {

	public synchronized
	static void main(String[] args) {
		DataBox databox = new DataBox();
		
		ProducerThread thP = new ProducerThread(databox);
		ConsumerThread thC = new ConsumerThread(databox);
		
		thP.start();
		thC.start();

	}

}

//데이터를 공통으로 사용하는 클래스

class DataBox{
	private String data;
	
	/* - get
	 * data변수의 값이 null이면 data변수에 문자열이 채워질 때까지 기다리고
	 * data변수에 값이 있으면 해당 문자열을 반환한다.
	 * 문자열을 반환한 후에는 다시 data변수의 값을 null로 만든다.(변수를 비워주는것)
	 * 
	 */
	
	public synchronized String getData(){
    // 데이터를 반환하는 것이 get
    (쓰레드레에서 가져오기위해 synchronized: 동기화 처리)
    
		if(data == null){
			try {
				wait();//데이터가 없던애는 깨워져서 실행됨
			} catch (InterruptedException e) {
				// TODO: handle exception
			}
		}
		String temp = data;
		
		System.out.println("쓰레드가 읽은 데이터 : " + temp);
		
		data = null;
		notify();//깨워주기
		return temp;
		//데이터를 가져올때 아무것도 없을때 가져오는것은 무의미하기 때문에 
                //있으면 가져오고 없으면 채워질때 까지 기다림
	}
	
	/* - set
	 * data변수에 값이 있으면 data변수가 비워질 때까지 기다리고
	 * data변수의 값이 null이면 새로운 data값을 data변수에 저장한다.
	 * 
	 */
	public synchronized void setData(String data){
		if(this.data != null){
			try {
				wait();
			} catch (InterruptedException e) {
				// TODO: handle exception
			}
		}
		
		this.data = data;
		System.out.println("Thread에서 새로 저장한 data : "+data);
		notify();//깨워주기
	}
}

// 데이터를 넣어주는 쓰레드

 class ProducerThread extends Thread{
	 private DataBox databox;

	public ProducerThread(DataBox databox) {
		super();
		this.databox = databox;
	}
	 
	 @Override
	public void run() {
		for (int i = 1; i <= 3; i++) {
			databox.setData("공급 데이터" + i);
		}
	}
 }

//데이터를 꺼내서 사용하는 쓰레드

 class ConsumerThread extends Thread{
	 private DataBox databox;

	public ConsumerThread(DataBox databox) {
		super();
		this.databox = databox;
	}
	 
	 @Override
	public void run() {
		for (int i = 1; i <= 3; i++) {
			String data = databox.getData();
		}
	}
 }



profile
신입 개발자 입니다!!!

0개의 댓글

관련 채용 정보