갑자기 자바 공부.. 학원 진도에서 딱히 중요하게 배우지 않았거나 까먹었던 부분, 람다식 스트림, 쓰레드 등등도 따로 공부해야 할 것 같아서 주말에 시간을 내서 공부하기로 한다. 🏫
어차피 프로그래머는 평생 공부해야할 것!
프로세스 : 실행 중인 프로그램 (자원 + 쓰레드)
쓰레드 : 프로세스 내 실제 작업을 수행 -> 모든 프로세스는 최소한 하나의 쓰레드를 갖고 있다.
프로세스 == 공장 , 쓰레드 == 일꾼
공장에 한 명의 일꾼만 두는 채로 공장을 늘리는 것보다
공장에 일꾼을 늘리는 것이 적은 비용이 든다. (멀티 쓰레드 방식)
JAVA의 경우 멀티쓰레드를 지원한다.
멀티 쓰레드가 무조건 장점만 있지는 않다
장점 | 단점 |
---|---|
1. 시스템 자원의 효율적 사용 | 1. 동기화에 주의 요함 |
2. 사용자에 대한 응답성 향상 | 2. 교착상태가 발생하지 않게 주의 요함 |
3. 작업이 분리되어 코드가 간결 | 3. 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야한다. |
class JavaThread extends Thread {
public void run(){
// 작업 내용
}
}
class JavaThread2 implements Runable {
public void run(){
// 작업내용
}
}
class Ex {
public void main(String[] args){
for(int i = 0; i < 100; i++){
System.out.print(0);
}
for(int i = 0; i < 100; i++){
System.out.print(1);
}
}
}
이때 위의 for문이 실행이 되고 끝난 후에 뒤에 있는 for문이 실행된다. 두 개의 프로세스는 각각 독립되어 섞이지 않는다.
0이 100개 출력된 후 1이 100개 출력된다.
class Ex {
public void main(String[] args){
Ex_1 t1 = new Ex_1(); // thread클래스 상속 방식 쓰레드 객체 생성
Runable r = new Ex_2();
Thread t2 = new Thread(r); // Runable 구현 방식의 쓰레드 객체 생성
t1.start();
t2.start(); // 멀티쓰레드 방식으로 한 프로세스 내에 2개의 쓰레드
}
class Ex_1 extends Thread{ // thread 클래스 상속
public void run(){
for(int i=0; i< 100; i++){
System.out.print(0);
}
}
}
class Ex_2 implements Runable{ // runable 인터페이스 구현
public void run(){
for(int i=0; i< 100; i++){
System.out.print(1);
}
}
}
이와 같은 멀티 쓰레드 방식은 1과 0이 섞여서 실행된다
이는 OS의 스케쥴러의 결정을 따른다.