Multi Thread?
- Multi-Processing
-> 여러 개의 CPU에서 동시에 여러 개의 프로세스가 수행
-> ex) Dual CPU
- Multi-tasking
-> 하나의 CPU에서 동시에 둘 이상의 작업을 수행
-> ex) 한글을 사용하면서 동시에 웹 브라우저를 실행시킴
- Multi-Threading
-> 하나의 프로세스 내에서 여러 개의 쓰레드가 작업을 수행
-> ex) 스타크래프트를 하면서 정찰과 자원획득, 건물 건축을 동시에 수행
=> 모든 활동들이 하나의 쓰레드로 작동함
- 필요성
-> 동시에 두 가지 이상의 작업을 수행하기 위하여
=> 동시에 for문을 2개 이상 실행해야 할 때
- 문제점
-> 여러 개의 쓰레드가 하나의 자원을 동시에 사용할 때 발생
=> 자료를 동시에 요청할 때 bottleneck 현상 발생
=> 동시사용과 병목현상으로 deadlock 발생
=> 데이터의 무결성에 대한 문제 발생
- 문제 해결책-1
-> 제어적인 측면
=> 우선권(priorith) 부여
=> 수동적인 대책
=> 컴파일러에게 위임
=> 쓰레드의 기본 우선권은 5로 부여됨
=> 프로그래머가 임의로 부여 가능
=> setPriority(int newPriority)로 설정
-> setPriority(int newPriority)
=> setPriority(int newPriority) : 새로운 우선권을 설정(1-10)
getPriority() : 현재 설정된 우선권을 알아냄
public static fainl int MIN_PRIORITY : 1
public static final int NORM_PRIORITY : 5
public static final int MAX_PRIORITY : 10
- 문제 해결책-2
-> 자료적인 측면
=> 시스템에 미루기
-=> 동기화(synchronized)
-=> 새로운 동기화 방식(Reentrantlock)
=> 프로그래머가 직접 제어
-=> 보다 효율적인 제어를 위해 wait()와 notify()를 사용
===================================================================================================================
public class SoloThread extends Thread{
private int number = 0;
public SoloThread(int n) {
// TODO Auto-generated constructor stub
System.out.println(this.getName());
number = n;
}
@Override
public void run() {
// TODO Auto-generated method stub
int i = 0;
while(i < number){
System.out.print(getName() + ":p:" + this.getPriority() + ":" + i + "\t");
try{
this.sleep(1000);
}catch (Exception e) {
// TODO: handle exception
i++;
}
}
System.out.println("\n" + this.getName() + ":p:" + this.getPriority() + ":쓰레드종료\t");
}
}
'프로그래밍 정리 > 자바' 카테고리의 다른 글
equals() (0) | 2013.07.11 |
---|---|
Object class (0) | 2013.07.11 |
Thread Join - 쓰레드가 작동할 경우 끝날 때까지 기다려주고 다음 명령문을 실행. (0) | 2013.07.09 |
Runnable, NotRunnable, Dead (0) | 2013.07.07 |
쓰레드(Thread) (0) | 2013.07.06 |