프로세스 : 실행중인 프로그램 , 자원과 쓰레드로 구성
쓰레드 : 프로세스 내에서 실제 작업을 수행 (프로세스= 공장 , 쓰레드 = 일꾼)
싱글쓰레드 프로세스: 자원+ 쓰레드
멀티쓰레드 프로세스 : 자원+쓰레드 다중
쓰레드의 구현
public static void main(String[] args) {
Runnable r = new ThreadEx1();
Thread t1 = new Thread(r);
t1.start(); //스레드 실행
ThreadEx2 t2 = new ThreadEx2();
t2.start();
}
}
class ThreadEx1 implements Runnable {
public void run() {
for (int i=0; i<50;i++) {
System.out.println(Thread.currentThread().getName()); //현재 실행중인 스레드
}
}
}
class ThreadEx2 extends Thread { //상속
public void run() {
for (int i=0; i<50;i++) {
System.out.println(this.getName()); //Thread클래스의 getName;
}
}
}
알아둬야 할점 : 출력결과 ThreadEx1 과 ThreadEx2가 섞이면서 실행됨.(t1이 앞에있어도 반드시 먼저 실행되는게아님)
(OS의 스케쥴러에 따라 실행결과가 바뀜)
main 메소드로 출력했을 때는 앞에꺼가 실행되야지 뒤에꺼가 실행됨.
쓰레드 - 사용자쓰레드 , 데몬쓰레드(보조쓰레드) , 사용자 쓰레드가 하나도 없을때 프로그램 종료
싱글쓰레드가 멀티쓰레드보다 시간은 덜 걸린다(멀티쓰레드는 context switching때문)
멀티쓰레드는 시간이 더 걸리더라도 동시에 두개 이상의 작업이 가능하다는 장점
쓰레드의 우선순위를 지정할 수 있다. (setPriority)
'IT 관련 > JAVA' 카테고리의 다른 글
자바 CompareTo 와 Compareto(reason: no instance(s) of type variable(s) T exist so that PriorityQueue<Collection> conforms to List<T>) (0) | 2024.01.16 |
---|---|
자바 enum(열거형) , 애너테이션(어노테이션) (0) | 2022.08.23 |
자바 지네릭스란 (0) | 2022.08.17 |
자바 HashMap , TreeMap (0) | 2022.08.14 |
자바 HashSet , TreeSet (0) | 2022.08.11 |