멀티스레드 프로그래밍: Thread, Runnable
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();
}
}