프로세스
프로세스
프로세스란 실행중인 하나의 애플리케이션으로 필요한 메모리를 할당 받아서 코드를 실행한다
스레드
실제 작업을 수행하는 주체 한가지 작업을 위해 순차적으로 실행할 코드를 이어놓은것
멀티 스레드
스레드가 두개 이상인 경우, 하나의 프로세스로 두 가지 이상의 작업을 처리 데이터 분할하여 병렬로 처리하거나 다수 클라이언트 요청 처리
한 스레드가 예외를 발생시킬 경우 프로세스 자체가 종료될 수 있다
메인 스레드
메인 스레드가 메인() 메소드를 실행시키면서 애플리케이션이 실행된다
main() 메소드의 첫 코드부터 아래로 순차적 실행 필요에따라 추가 작업 스레드를 만들어 병렬로 코드 실행 가능
스레드 생성과 실행
스레드 생성 방법 2가지
- Runnable 인터페이스 구현
- Thread 클래스 상속
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class ThreadWithClass extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName()); // 현재 실행 중인 스레드의 이름을 반환함.
try {
Thread.sleep(10); // 0.01초간 스레드를 멈춤.
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
class ThreadWithRunnable implements Runnable {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(Thread.currentThread().getName()); // 현재 실행 중인 스레드의 이름을 반환함.
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
public class Thread01 {
public static void main(String[] args){
ThreadWithClass thread1 = new ThreadWithClass(); // Thread 클래스를 상속받는 방법
Thread thread2 = new Thread(new ThreadWithRunnable()); // Runnable 인터페이스를 구현하는 방법
thread1.start(); // 스레드의 실행 strat를 통해서 스레드의 run()메소드가 실행된다
thread2.start(); // 스레드의 실행
}
}
위 코드를 실행하면 Thread-0, Thread-1이 서로 번갈아가며 5번 출력된다
동기화 메소드
스레드가 사용중인 객체를 다른 스레드가 변경할 수 없게 하려면 스레드 작업이 끝날 때까지 객체에 잠금을 걸어야한다
1
2
3
public synchoronized void method() {
//해당 부분은 단하나만의 스레드만 실행된다
}
This post is licensed under CC BY 4.0 by the author.