충분히 쌓여가는
싱글 쓰레드와 멀티 쓰레드, 쓰레드의 I/O 블락킹(blocking) 본문
싱글 쓰레드와 멀티 쓰레드
싱글 쓰레드
class ThreadTest {
public static void main(String[] args) {
for(int i = 0; i<300; i++) {
System.out.println("-");
}
for(int i = 0; i<300; i++) {
System.out.println("ㅣ");
}
}
}
코드
class ThreadTest {
public static void main(String args[]) {
long startTime = System.currentTimeMillis();
for(int i=0; i < 300; i++)
System.out.printf("%s", new String("-"));
System.out.print("소요시간1:" +(System.currentTimeMillis()- startTime));
for(int i=0; i < 300; i++)
System.out.printf("%s", new String("|"));
System.out.print("소요시간2:"+(System.currentTimeMillis() - startTime));
}
}
멀티 쓰레드
th1과 th2의 순서는 OS 스케줄러가 결정하기 때문에 마음대로 할 수 없다
class ThreadTest {
public static void main(String args[]) {
MyThread1 th1 = new MyThread1();
MyThread2 th2 = new MyThread2();
th1.start();
th2.start();
}
}
class MyThread1 extends Thread {
public void run() {
for(int i=0; i<300; i++) {
System.out.println("-");
}
} // run()
class MyThread2 extends Thread {
public void run() {
for(int i=0; i<300; i++) {
System.out.println("ㅣ");
}
} // run()
}
코드
class ThreadTest {
static long startTime = 0;
public static void main(String args[]) {
ThreadEx3_1 th1 = new ThreadEx3_1();
th1.start();
startTime = System.currentTimeMillis();
for(int i=0; i < 300; i++)
System.out.printf("%s", new String("-"));
System.out.print("소요시간1:" + (System.currentTimeMillis() - ThreadTest.startTime));
}
}
class ThreadEx3_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++)
System.out.printf("%s", new String("|"));
System.out.print("소요시간2:" + (System.currentTimeMillis() - ThreadTest.startTime));
}
}
쓰레드의 I/O 블락킹
싱글 쓰레드
class ThreadTest {
public static void main(String[] args) {
String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
System.out.println("입력하신 값은 " + input + "입니다.");
for(int i=10; i > 0; i--) {
System.out.println(i);
try {
Thread.sleep(1000); // 1초간 시간을 지연한다.
} catch(Exception e) {}
}
}
}
코드
입력하기 전까지 println()와 for()문으로 넘어가지 못한다
import javax.swing.JOptionPane;
class ThreadTest {
public static void main(String[] args) throws Exception {
String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
System.out.println("입력하신 값은 " + input + "입니다.");
for(int i=10; i > 0; i--) {
System.out.println(i);
try {
Thread.sleep(1000); // 1초간 시간을 지연한다.
} catch(Exception e ) {}
}
}
}
입력하신 값은 12입니다.
10
9
8
7
6
5
4
3
2
1
멀티 쓰레드
이때는 입력을 기다릴 때 th2가 실행되기 때문에 아무것도 안하는 싱글 쓰레드보다 멀티 쓰레드가 작업이 먼저 끝나게 된다
class ThreadTest {
public static void main(String[] args) {
ThreadTest_1 th1 = new ThreadTest_1();
th1.start();
String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
System.out.println("입력하신 값은 " + input + "입니다.");
}
}
class ThreadTest_1 extends Thread {
public void run() {
for(int i=10; i > 0; i--) {
System.out.println(i);
try {
sleep(1000);
} catch(Exception e ) {}
}
} // run()
}
코드
import javax.swing.JOptionPane;
class ThreadTest {
public static void main(String[] args) throws Exception {
ThreadTest_1 th1 = new ThreadTest_1();
th1.start();
String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
System.out.println("입력하신 값은 " + input + "입니다.");
}
}
class ThreadTest_1 extends Thread {
public void run() {
for(int i=10; i > 0; i--) {
System.out.println(i);
try {
sleep(1000);
} catch(Exception e ) {}
}
} // run()
}
10
9
2023-08-03 09:46:52.271 java[34291:117197] TSM AdjustCapsLockLEDForKeyTransitionHandling - _ISSetPhysicalKeyboardCapsLockLED Inhibit
8
7
6
5
4
3
입력하신 값은 12입니다.
2
1
'Java > JAVA3' 카테고리의 다른 글
데몬 쓰레드(daemon thread), 쓰레드의 상태 (0) | 2023.08.03 |
---|---|
쓰레드의 우선순위, 쓰레드 그룹 (0) | 2023.08.03 |
main 쓰레드 (0) | 2023.08.03 |
쓰레드의 구현과 실행 (0) | 2023.08.02 |
thread 쓰레드 (0) | 2023.08.02 |