원주율(PI)를 계산/출력하는 쓰레드
package kr.or.didt.basic;
//쓰레드에서 객체를 공통으로 사용하는 예제
/*
* 원주율(PI)를 계산하는 쓰레드와
* 계산된 원주율을 출력하는 쓰레드가 있다.
*
* 월주율을 저장하는 객체가 필요하다.
* 이 객체를 두 쓰레드가 공통으로 사용해서 처리한다.
*
*/
public class ThreadTest15 {
public static void main(String[] args) {
//공통으로 사용할 객체 생성
ShareData sd = new ShareData();
//쓰레드 객체를 생성하고 공통으로 사용할 객체를 쓰레드에서 주입한다.
//(쓰레드가 사용할 수 있게 참조값을 해당 객체에 저장하는 것)
CalcPIThread ct = new CalcPIThread();
ct.setSd(sd);
PrintPIThread pt = new PrintPIThread(sd);
ct.start();
pt.start();
}
}
//원주율을 관리하는 클래스 작성(공통으로 사용할 클래스)
class ShareData{
public double result; // 계산된 원주율이 저장될 변수 선언
public boolean isOk=false; //계산이 완료되었는지를 나타내는 변수
}
//원주율을 계산하는 쓰레드
class CalcPIThread extends Thread{
private ShareData sd;//공통으로 사용할 수ㅔ어 데이터를 저장할 변수 선언
//1.setter(setSd)이용하는 방법
public void setSd(ShareData sd){
this.sd = sd;
}
@Override
public void run() {
//쓰레드에서는 원주율을 계산해야됨
/*
* 원주율 = (1/1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 ....) * 4;
* 1 - 3 + 5 - 7 + 9 - 11 ....
*
* 0 1 2 3 4 5 .... ==> 2로 나눈 몫
*/
//괄호 속 결과를 구하기
double sum = 0.0; //0으로 초기화
for (int i = 1; i < 1_000_000_000; i+=2) {
if((i/2) % 2 == 0){//2로 나눈 몫 구하기(몫이 짝수인 경우)
sum += (1.0/i);//실수로 하나 나눠주기
}else{
sum -= (1.0/i);// 홀수인 경우
}
}
sd.result = sum * 4; //계산이 완료된 값을 공통객체에 저장한다.
sd.isOk = true;
}
}
// 계산이 완료되면 계산된 원주율을 출력하는 쓰레드
class PrintPIThread extends Thread{
private ShareData sd;
//2.생성자를 이용한 초기화
public PrintPIThread(ShareData sd) {
this.sd = sd;
}
public void run() {
while(true){
if(sd.isOk == true){
break;//반복문 빠져나가기
}
Thread.yield();
}
System.out.println();
System.out.println("결과 : "+sd.result);
System.out.println("PI : "+Math.PI);
}
}
Author And Source
이 문제에 관하여(원주율(PI)를 계산/출력하는 쓰레드), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@susan9905/원주율PI를-계산출력하는-쓰레드저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)