Thread.sleep(1000)을 써서 1초간 스레드 실행 정지하며 천천히 출력되어 늘려진 시간 간격으로 인해 문자와 숫자가 좀 더 골고루 출력된다.
SharedArea sharedArea;
CalcThread(SharedArea sharedArea) {
this.sharedArea = sharedArea;
}
public void run() {
double total = 0.0;
for (int cnt = 1; cnt < 1000000000; cnt += 2)
if (cnt / 2 % 2 == 0)
total += 1.0 / cnt;
else
total -= 1.0 / cnt;
synchronized (sharedArea) {
sharedArea.result = total * 4;
sharedArea.isReady = true;
}
}
}
----------------------------------------------------------
public class PrintThread extends Thread { // 파이를 출력
SharedArea sharedArea;
PrintThread(SharedArea sharedArea) {
this.sharedArea = sharedArea;
}
public void run() {
while(sharedArea.isReady != true) {
try{
Thread.sleep(100);
}catch(Exception e){}
}
synchronized (sharedArea) {
System.out.println(sharedArea.result);
}
}
}
-----------------------------------------------------------
public class SharedArea {
double result;
boolean isReady;
}
---------------------------------------------------------
public class ThreadExample3 {
public static void main(String[] args) {
SharedArea obj = new SharedArea();
CalcThread thread1 = new CalcThread(obj);
PrintThread thread2 = new PrintThread(obj);
thread1.start();
thread2.start();
}
}
public class CalcThread extends Thread{ // 파이를 계산
SharedArea sharedArea;
CalcThread(SharedArea sharedArea){
this.sharedArea = sharedArea;
}
public void run(){
double total = 0.0;
for (int cnt = 1; cnt < 1000000000; cnt += 2)
if (cnt / 2 % 2 == 0)
total += 1.0 / cnt;
else
total -= 1.0 / cnt;
synchronized (sharedArea) {
sharedArea.result = total * 4;
sharedArea.isReady = true;
}
}
}
----------------------------------------------------------
public class PrintThread extends Thread{ // 파이를 출력
SharedArea sharedArea;
PrintThread(SharedArea sharedArea){
this.sharedArea = sharedArea;
}
public void run(){
while(sharedArea.isReady != true){
try{
Thread.sleep(100);
}catch(Exception e){}
}
synchronized (sharedArea){
System.out.println(sharedArea.result);
}
}
}
-----------------------------------------------------------
public class SharedArea {
double result;
boolean isReady;
}
---------------------------------------------------------
public class ThreadExample3 {
public static void main(String[] args) {
SharedArea obj = new SharedArea();
CalcThread thread1 = new CalcThread(obj);
PrintThread thread2 = new PrintThread(obj);
thread1.start();
thread2.start();
}
}
'자바의 기초문법' 카테고리의 다른 글
GUI 윈도우로 작동하는 덧셈 프로그램 문제 (0) | 2015.12.29 |
---|---|
GUI 프로그래밍: Swing (0) | 2015.12.29 |
객체의 직렬화와 역직렬화 (0) | 2015.12.28 |
네스티드 클래스: static nested class, inner calss (0) | 2015.12.28 |
파일 입출력 기능과 성능을 향상시키는 클래스들 (0) | 2015.12.28 |