T04~T08
class SumThread extends Thread {
private long max, min;
public SumThread(long min, long max) {
this.min = min;
this.max = max;
}
@Override
public void run() {
long sum = 0L;
for(long i=min; i <=max; i++) {
sum += i;
}
System.out.println(min + " ~ " + max + "까지의 합 : " + sum);
}
}
SumThread sm = new SumThread(1l, 2000000000L); // 20억
long startTime = System.currentTimeMillis();
sm.start();
try {
sm.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
// 단독으로 처리할 때의 처리시간(ms)
long result = endTime - startTime; // 931ms
SumThread[] sumThs = new SumThread[] {
new SumThread( 1L, 500000000L),
new SumThread( 500000001L, 1000000000L),
new SumThread(1000000001L, 1500000000L),
new SumThread(1500000001L, 2000000000L)
};
startTime = System.currentTimeMillis();
for(SumThread th : sumThs) {
th.start();
}
for(SumThread th : sumThs) {
try {
th.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
endTime = System.currentTimeMillis();
// 협력해서 처리할 때의 처리시간(ms)
long result = endTime - startTime; // 124ms
public class T05_ThreadTest {
public static void main(String[] args) {
String str = JOptionPane.showInputDialog("아무거나 입력하세요.");
System.out.println("입력한 값은 " + str + "입니다.");
for (int i = 10; i >=1; i--) {
System.out.println(i);
try {
Thread.sleep(1000); // 1초동안 잠시 멈춘다.
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} // main
} // class
class DataInput extends Thread {
@Override
public void run() {
String str = JOptionPane.showInputDialog("아무거나 입력해");
System.out.println("입력한 값은 " + str + "입니다.");
// 입력이 완료되면 inputCheck변수를 true로 변경한다.
T06_ThreadTest.inputCheck = true;
}
}
class CountDown extends Thread {
@Override
public void run() {
for (int i = 10; i >=1; i--) {
// 입력이 완료되었는지 여부를 검사하고 입력이 완료되면
// run() 메서드를 종료시킨다. 즉 현재쓰레드를 종료시킨다.
if(T06_ThreadTest.inputCheck == true) {
return; // run()메서드가 종료되면 쓰레드로 죽는다.
}
System.out.println(i);
try {
Thread.sleep(1000); // 1초동안 잠시멈춤
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 10초가 경과되었는데도 입력이 없으면 프로그램을 종료한다.
System.out.println("10초가 지났습니다. 프로그램을 종료합니다.");
System.exit(0); // 프로그램을 종료시키는 명령
}
}
public class T06_ThreadTest {
// 입력여부를 확인하기 위한 변수 선언
// 모든 쓰레드에서 공통으로 사용할 변수
public static boolean inputCheck = false;
public static void main(String[] args) {
Thread th1 = new DataInput();
Thread th2 = new CountDown();
th1.start();
th2.start();
} // main
}