스레드 시작

파이를 계산한다

공유영역에 계산 결과를 쓴다→

스레드 끝

공유영역

 

3.14.... 

스레드 시작

→공유영역의 데이터를 읽는다 

데이터를 출력한다

스레드 끝

 

위와 같은 프로그램을 만들려합니다. 먼저 공유영역을 만들어 줍니다.

class SharedArea {
	double result;
	boolean isReady;
}

 

 

파이를 계산하는 스레드 클래스를 만들어줍니다.

class CalThread extends Thread{
	SharedArea sa_save;	
	public void run(){
		double total=0;
		for(int i=1;i<1000000000;i+=2){
			if(i/2%2==0)
				total+=1.0/i;
			else
				total-=1.0/i;
		}
		double pi = total*4;
		sa_save.result = pi;//공유영역에 저장
		sa_save.isReady=true;	//공유데이터가 쓰였는지 확인하는 변수
	}
}

 

파이를 출력하는 스레드 클래스를 만들어줍니다.

class PrintThread extends Thread{
	SharedArea sa_read;
	public void run(){
		while(sa_read.isReady !=true)
			continue;
		System.out.println(sa_read.result);//공유영역의 데이터 출력
	}

}

 

마지막으로 스레드들을 실행할 메인메소드가 있는 클래스를 만들어줍니다.

class MultiThread2 {
	public static void main(String[] args) {
		CalThread thread1=new CalThread();
		PrintThread thread2 = new PrintThread();
		SharedArea sa = new SharedArea();
		/*
		 * 공유영역 객체를 생성해서 그 객체의 참조값을 두 스레드의 필드에 저장
		 */
		thread1.sa_save=sa;	
		thread2.sa_read=sa;
		//스레드 실행
		thread1.start();
		thread2.start();
	}

}

 

3.141592651589258