2014년 2월 11일 화요일

20140211 스레드(Thread)



 : 스레드는 멀티 테스킹 을 할 수 있게 도와준다.(사실 멀티 테스킹 처럼 보이도록 ㅋ)
멀티 스레딩을 이용할 경우 여러가지 작업을 동시에 할 수 있는 것처럼 보여주나
실제로 CPU는 한번에 한 가지 작업밖에 처리하지 못한다.

1. 프로세스 와 스레드
  프로세스는 자신만의 데이터를 가지는 데 반해 스레드는 데이터를 공유하는 것이 가장 큰 차이다.

2. 사용방법

- 스레드 클래스를 상속하는 방법 : 반드시 run()메소드를 재정의(Overriding) 해야한다.
- Runnable 인터페이스를 구현하는 방법 : run() 메소드를 가지는 클래스를 작성 후, 이 클래스의 객체를 thread 클래스의 생성자를 호출할 때 전달한다.


  스레드의 개념은 예제를 통해 익히는 것이 더욱 좋을것 같다.ㅠㅠ
스레드의 예제를 풀다 궁금한 점이 생겼는데. 확인 결과 답은
 - 이론적으로 가능하고 실제로는 제어하기가 매우 까다롭다.
이다. -_-;

3. 스레드 활용(필수확인)
  : 스레드는 우선순위를 줄 수 있다.
  예제를 하다보면 스레드가 동시에 실행되는 것 처럼 보이는 데 이는 CPU가 스레드를 나누어 쓰기 땜이다.
  어떤 원칙으로 어떤 순서로 스레드를 수행시킬 것인가를 결정하는 스케쥴링(scheduling)이 필요하다.
우선순위 (10~1)가 높을수록 먼저 처리된다. -> 예제로 확인해보고 싶은데 마땅한게 없어.ㅠㅠ 찾아봐야지..
그 외에
Thread() // 매개 변수가 없는 기본 생산자
Thread(String name) // 이름을 가진 쓰레드 객체 생성
void start() // 스레드 시작
void run() // 스레드가 시작되면 자동으로 실행된다.
void setPriority(int priority) // 스레드 우선순위 지정

4. 스레드 스케줄링 관련 메소드
- sleep(long millis) // 밀리초 단위로 스레드를 쉬게한다.
- join() // 해당 스레드가 소멸될 때 까지 기다린다.
- yield() // CPU를 다른 스레드에 양보한다. 동일 우선순위를 가지는 스레드를 실행시킬때 사용
-> 기본적으로 스레드의 우선순위는 "5"로 부여되고 "10"이 최대, "1"이 최소 이다.
- interrupt // 스레드가 실행중인 작업을 멈추고 다른 것을 하도록 하는 메커니즘, 스레드가 인터럽트에 어떻게 반응할지는 전적으로 후로그래머 책임!

5. 동기화(synchronization)
  : 동기화는 애플, 아이폰 등의 그것이 아니고
"한 번에 하나의 스레드 만이 공유 데이터를 접근"할 수 있도록 제어하는 방법
즉, "너"와 "내"가 있는데
"내"가 화장실 사용할 때 문을 잠그고 "너"는 내가 물 내리고 나올 때까지 기다려야 하는 것이다.

- 이는 메소드 앞에 synchronized라고 붙여주기만 하면 해결된다.(해우소 문을 잠그고 혼자 사용!)
-> 스레드 우선순위와는 상관 없나? 궁금하네....(필수확인)






점점...... 어려워 진다.....................
나락으로 빠진다..................................................

댓글 없음:

댓글 쓰기