JAVA3_02_쓰레드 종류와 블락킹

charl hi·2021년 9월 23일
0

JAVA3

목록 보기
2/9

링크텍스트

쓰레드의 종류

사용자쓰레드 - 데몬쓰레드

사용자쓰레드

  • main쓰레드(main()의 코드를 수행하는 쓰레드)
  • ✨실행 중인 사용자쓰레드가 하나도 없을 때 프로그램은 종료된다.
    : main쓰레드가 끝나도 다른 쓰레드가 실행중이면 프로그램 종료X

데몬쓰레드

  • 사용자쓰레드를 보조하는 쓰레드

싱글쓰레드 - 멀티쓰레드

싱글쓰레드


public class Ex13_02 {

	public static void main(String[] args) {
		long startTime = System.currentTimeMillis();
		
		for(int i=0; i<50; i++) {
			System.out.printf("%s", new String("-"));
		}
		System.out.print("소요시간1: "+(System.currentTimeMillis()-startTime));
		
		for(int i=0; i<50; i++) {
			System.out.printf("%s", new String("|"));
		}
		System.out.print("소요시간2: "+(System.currentTimeMillis()-startTime));

	}

}

--------------------------------------------------소요시간1: 83||||||||||||||||||||||||||||||||||||||||||||||||||소요시간2: 89


멀티쓰레드


class Ex13_03 {
	static long startTime = 0;

	public static void main(String[] args) {
		Thread03_1 t1 = new Thread03_1();
		t1.start();
		startTime = System.currentTimeMillis();
		
		for(int i=0; i<50; i++) {
			System.out.printf("%s", new String("-"));
		}
		System.out.print("소요시간1: "+(System.currentTimeMillis()-Ex13_03.startTime));

	}

}

class Thread03_1 extends Thread{
	public void run() {
		for(int i=0; i<50; i++) {
			System.out.printf("%s", new String("|"));
		}
		System.out.print("소요시간2: "+(System.currentTimeMillis()-Ex13_03.startTime));
	}
}

--------------------------------------------------||||||||||||||||||소요시간1: 84||||||||||||||||||||||||||||||||소요시간2: 90
  • 이 경우엔 멀티쓰레드는 context switching 때문에 시간이 오래 걸린다.


쓰레드의 I/O 블락킹(blocking)

  • 쓰레드 수행(작업 진행)이 정지된 것
  • 이를 멀티쓰레드가 작업을 효율적으로 수행
  • 입출력이 있을 경우 멀티쓰레드가 시간이 덜 걸린다!

ex13_04

싱글쓰레드

import javax.swing.JOptionPane;

public class Ex13_04 {

	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);
			} catch (Exception e) {
			}
		}
		

	}

}

1초마다 카운트다운


ex13_05

멀티쓰레드

import javax.swing.JOptionPane;

class Ex13_05 {

	public static void main(String[] args) {
		//멀티쓰레드
		Thread05_1 t1 = new Thread05_1();
		t1.start();
		
		String input = JOptionPane.showInputDialog("아무 값이나 입력하세요.");
		System.out.println("입력하신 값은 "+input+"입니다.");

	}

}

class Thread05_1 extends Thread{
	public void run() {
		for(int i=10; i>0; i--) {
			System.out.println(i);
			try {
				sleep(1000);	//Thread의 메소드
			} catch (Exception e) {
			}
		}
	}
}

✨✨기다리지 않고 실행됨!!

입력해야 끝남




Ref

0개의 댓글