본문 바로가기
  • think normal
새로워지기/서른의 생활코딩

java _20120227 (Thread)

by 청춘만화 2012. 2. 27.


java _20120227 (Thread) 

 

프로세스 : 현재 수행되고 있는 프로그램을 말한다.
    주기억장치(OS)에 로드되서 실행되는 단위 (워드,엑셀...)
쓰레드 :프로세스 보다 작은 실행 단위를 말한다 (인쇄명령,색상변경,글꼴변경...)

 (프로세서 : 수행되고 있는 프로세스 중 "현재" 작업 권한을 갖는 프로그램을 말한다.)

쓰레드 사용 :   1) java.lang.Thread 클래스
  (Thread 클래스로부터 직접 상속받아 스레드를 생성)

      class PrimeThread extends Thread {// Thread 클래스로부터 상속
            long minPrime;
            PrimeThread(long minPrime) {
                this.minPrime = minPrime;
            }
 
            public void run() {
                // compute primes larger than minPrime
                 . . .
            }
        }

  2) Runnable 인터페이스
  (현재의 클래스가 이미 다른 클래스로부터 상속을 받고 있다면 Runnable
    인터페이스를 사용하여 스레드를 생성할 수 있다)
  (현재의 클래스가 이미 다른 클래스로부터 상속 받고 있는 경우)
  (단,Runnable 인터페이스 안엔, run()함수만 있기때문에..
   별도의 tread객체 생성 + "rb를 매개변수로 하여 스레드 객체 tb를 생성")

        class PrimeRun implements Runnable {
            long minPrime;
            PrimeRun(long minPrime) {
                this.minPrime = minPrime;
            }

              public void run() {
               // compute primes larger than minPrime
                 . . .
            }
        }

쓰레드 사용 :  4개의 생성자를 제공
  Thread()
  Thread(String s)
  Thread(Runnable r)
  Thread(Runnable r, String s)

구현
 run() :쓰레드 개념으로 수행시켜 주고자하는 코드를 run()안에 추가한다.
  (Runnable interface로부터 상속됨)

        start():자바가상머신에게 쓰레드 개념으로 구성된 run()를 수행시켜 줄 것을 요청한다.
  (thread class로부터 상속됨)
 stop(): 중지(완전히)(thread class로부터 상속됨)

 wait():   잠시중지(object class로부터 상속됨)
 notify(): 잠시중지 해제(object class로부터 상속됨)
 notifyAll(): (object class로부터 상속됨)
 
과정 start() ->"큐구조" 중간에 낀 명령실행 ->run()


Thread 클래스의 메소드
 static void sleep(long msec)
  throws InterruptedException ->try,catsh코드 +InterruptedException
 void start() ->스레드를 시작시킨다. run() 메소드를 호출
 int getPriority() ->스레드의 우선 순위를 반환(0~10) : 모니서터상에서 실행되는 순서X
            +기본(5,숫자높을 수록 우선순위)
 void suspend() = wait
 void resume()  = notify
 



DaemonThread
다른 쓰레드 객체가 종료됨과 동시에 덩달아 종료되는 쓰레드 객체를 말한다.

 


Class ThreadGroup

 예)
  tg1 ->  t1
   t2
   tg2 -> t3
       -> t4
  t는 각각 개별 실행
  g에서 대기, 재개 가능

 Constructor
  ThreadGroup(String name)
  ThreadGroup(ThreadGroup parent, String name)

 사용예)
 ThreadGroup TG1 = new ThreadGroup("TG1")
 ThreadGroup TG1 = new ThreadGroup("TG1","TG2")
 Thread t1 = new Thread(TG1,"t1")
 Thread t2 = new Thread(TG1,"t2")
 Thread t3 = new Thread(TG1,"t3")
 Thread t4 = new Thread(TG1,"t4")

  t1.start(); t2.start(); t3.start(); t4.start();  //개별 실행!

 TG1.suspend(); // 그룹에서 컨트롤
 TG1.resume();
 ...

 

 

 


동기화(Synchronization)
 대부분의 응용 프로그램에서 다수개의 스레드가 공유
 but 공유부분은 상호 배타적으로 사용되어야
 한 스레드가 synchronized method를 수행 중이면 다른 스레드는 대기한다

 synchronized 를 이용한 동기화

 1)특정 객체에 lock을 걸고자 할때
  …
  synchronized(객체의 참조 변수or "this") {
  …
  }

 2)메소드에 lock 걸고자 할 때
  접근지정자 synchronized 결과형 함수명 {
  …
  }


 

'새로워지기 > 서른의 생활코딩' 카테고리의 다른 글

ex2) java_thread  (0) 2012.02.27
ex1) java_thread  (0) 2012.02.27
ex29) java_oop  (0) 2012.02.24
ex28) java_oop  (0) 2012.02.24
ex27) java_oop  (0) 2012.02.24

댓글