1. multiThread란?
program을 작업장이라고 한다면 Thread는 그 안에서 일하는 일꾼이다.
2. process와 thread 비교
program의 복잡도에 따라 thread는 하나만 있을수도 있고 여러개 있을수도 있다. 즉, 복잡한 process에는 한개이상의 thread를 가지고 있다.
가장 큰 차이점은 memory 공유의 여부-> thread는 같은 메모리를 사용할 수 있음
그래서 문제가 생긴다.(예를 들면 같은 이클립스에 동시에 작업할때 충돌이 생길 수 있다)
3. thread 생성법
- Runnable interface 구현과 Thread class 상속 방법
- 익명객체 사용
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
Thread work= new Thread(new Runnable() {
@Override
public void run() {//1. 해야할 일
for (int i = 0; i < 5; i++) {
System.out.println("워크 스레드가 하는 일");
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
});
|
cs |
4. Thread의 특징
1. work thread는 main tread와 별개로 움직임 => 비동기라는 뜻 => 순서가 없음
2. Thread 는 Round Robin 방식을 사용 하기 때문
3. 동시다발적으로 움직임.
thread의 이런 위와 같은 특징으로 나온것이 synchronized!!
5. synchronized란?
- thread는 memory를 공유하기 때문에 내가 사용하던 것을
중간에 누군가가 사용하면 값이 바뀔수도 있다. 그래서 이것을 제어하기 위해 나온것!!
즉, 다시말해 내 작업이 끝나기 전까지 다른 사람의 접근을 막는것!
컬렉션 프레임워크에서 사용한 vector나 hashTable과 비슷하게 다수유저의 동시접근을 막는 개념6. Thread state
여러개가 있지만 위에 두가지가 제일 대표적으로 많이 쓰인다.
- new : 자동차 실행전
- runnable : 자동차 실행상태일때
7. Thread Control
1) sleep()
- Sleep 은 주어진 milliseconds 동안 thread 를 일시 정지 시킨다.
- Thread.sleep(1000) 형식으로 사용 한다.
2) yield()
- Yield 는 특정 스레드에게 제어권을 양보 한다. => 너도 한번 할 기회를 줄게
- Thread.yield() 형식으로 사용 한다.
3) join()
- Join 은 다른 thread의 종료를 기다린 후에 실행 할 때 사용 한다.
- 이 부분에서 모든 thread가 정지해 있는데 ->blocking
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
|
public class MainThread {
public static void main(String[] args) throws InterruptedException {
System.out.println("1~100 까지의 합은?");
OperThread oper= new OperThread();
oper.start();//워크 스레드 실행(1~100 더하기)
oper.join()
System.out.println("답 : "+oper.getNum());
}
public class OperThread extends Thread {
private int num;
public int getNum() {
return num;
}
@Override
public void run() {
for (int i = 0; i <=100; i++) {
num+=i;//누적합
//System.out.println(num);
}
}
|
cs |
'Backend > JAVA' 카테고리의 다른 글
JAVA(8)- stream(NIO) (0) | 2022.09.23 |
---|---|
자바(8)- Stream(Input/Output) (2) | 2022.09.21 |
자바(6)- 매개변수(기본형/참조형) (0) | 2022.09.12 |
자바(6)-Class (변수와 메서드) (0) | 2022.09.12 |
자바(5)- 객체 배열 (2) | 2022.09.12 |