Thread에 대해서 집중~~~

2009. 6. 23. 16:57 - 에릭투스

             Collections : java.util.*;

                           각종 collection 관련 유틸 클래스(shuffle , sort)

            

             Thread : 동시에 일을 처리하게 도와주는 thread

1)    Process : 각각의 프로그램을 의미

 

오늘의 수업 : Thread .

: 웹개발자 상황에서는 Thread를 많이 사용하지 않으니, 이번 수업에서 이해할 것.

 

 

l  process: 컴퓨터내에서 실행중이 프로그램

 

l  Thread

 

하나의 프로세스에서 동시에 두가지 이상의 일을 수행하는 것으로 프로세스보다

작은 단위이며 프로세스의 resource를 공유하기 때문에 가볍다는 장점이 있다.

 

l  Thread생성방법

 

Java.lang.Thread를 상속받는 방법

Java.lang.Runable(interface)을 상속받아서 구현하는 방법(권장)

 

 

<void> run ()

 

             thread가 별개의 Runnable 실행 오브젝트를 사용해 작성되었을 경우,

             Runnable 오브젝트의 run Method가 불려 갑니다.

             Method 안쪽에 Thread가 해야할 일을 작성한다.

                                                    

             * thread가 별개의 Runnable 실행 오브젝트를 사용해 작성되었을 경우,

             Runnable 오브젝트의 run 메소드가 불려 갑니다.

             그렇지 않은 경우, 이 메소드는 아무것도 실시하지 않고 복귀합니다

 

Thread 의 서브 클래스는, 이 메소드를 오버라이드(override) 하지 않으면 안됩니다.

 

l  Thread (Runnable  target)
          새로운 Thread 오브젝트를 할당합니다.

 

Ex)

Thread t = Thread.currentThread();

System.out.println("t.getName()   : "+t.getName());

Runnable tt = new TestThread1();

Thread th1 = new Thread(tt);

th1.start();

 

<주요 Method>

<static void> sleep (long millis)
          현재 실행중의 thread, 지정된 밀리 세컨드수의 사이, sleeve

(일시적으로 실행을 정지) 시킵니다.

 

l  잠깐 쉬게하는 메소드. (반드시 try cath문으로 Exception을 정의해줘야한다,)

l  1000m = 1sec

 

<static void> sleep (long millis, int nanos)
       

현재 실행중의 thread, 지정된 밀리 세컨드수로 지정된 나노초수를 가산한 사이, sleeve (실행 정지) 시킵니다.

 

Sleepthrows InterruptedException 때문에 반드시 잡아줘야한다.

Thread를 만들어줄 때 조심해야한다. (쉬게해주지 않으면 cpu100%)

 

 

terminated

ready

running

(CPU에 할당)

new

waiting

start()

run()

scheduler

yield()

sleep()

wait()

stop()

suspend()

IO의 블록 ex) s.read()

notify()

 

notifyAll()

 

resume()

run()body

수행완료

<Thread >

 

New : start()하면 ready로 감.

Waiting : sleep값에 따라. ( waiting만큼 쉰 후에는 다시 ready상태로 감.)

 

 

l  기본적으로 서버는 멀티쓰레드 방식이 많다.

l  한번에 여러사용자들이 동시에 작업할 수 있게하는 방식.

 

자바는 부모 클래스를 상속받는 것을 별로 좋아하지 않는다.

             So interface를 상속받는 것을 권장.

앞으로 Thread를 상속하는 것을 사용하지 않을 것임..

(하지만 우리나라에서 사용하는 방식이나 다른 책에서는 이방식을 추천하지만)

 

Java. Lang .

Runnable : 인터페이스임.

인터페이스에서 상속받은 메소드를 반드시 오버라이딩 해줘야한다.

runnable에서 메소드는 public void run();

 

 

 

Constructor<Thread 이름 지정.>

l  Thread (Runnable  target, String  name)
 새로운
Thread 오브젝트를 할당합니다.

 

Method <Thread 이름을 지정.>

l  setName (String  name)

 thread의 이름을 인수 name 에 동일해지도록(듯이) 변경합니다.

 

다른 Thread가 다 끝날때까지 기다려주는 메소드가 있다.

Static method가 아님.         Thread method

l  join ()

 thread가 종료하는 것을 대기합니다.

l  join (long millis)
 thread가 종료하는 것을, 최고로 millis 밀리 세컨드 대기합니다.

l  join (long millis, int nanos)
 최고로 millis 밀리 세컨드에 nanos 나노초를 가산한 사이,

thread가 종료하는 것을 대기합니다.

 

public final void join(long millis,int nanos)

                          throws InterruptedException

 

l  getPriority ()
          thread의 우선 순위를 돌려줍니다.

 

l  setPriority (int newPriority)
          thread의 우선 순위를 변경합니다.

 

l  activeCount ()
          현행 thread thread 그룹내의 액티브한 thread수를 돌려줍니다.

                          현재 동작중인 Thread 수를 돌려준다.

 

l  생성 (대상 target 만드는법)

 

1)    java. Lang thread 를 상속받는 방법

2)    java . lang. Runnable을 구현하는 방법(권장)

실행 start() 호출 JVM run()메소드를 자동으로 실행한다.

(쓰레드의 LifeCycle 참조)

 

l  소멸

             Run() 메소드의 실행이 끝나면 종료 된다.

 

l  멀티 쓰레드

             2개이상의 쓰레드가 동시에 실행되는 것.

 

l  동기화(synchronized)

Synchronized로 되어있는 곳들은 실행중인 쓰레드가 대상객체의 Lock(monitor)을 소유하고 실행이 끝난뒤에 unlock(monitor를 반환)해주는 것. 한번에 하나의 Thread만 실행이 가능하게끔 만들어 주는 것이 동기화라 한다.

 

l  우선순위(priority)

MIN_PRIORITY(1) , NORM_PRIORITY(5) , MAX_PRIORITY(10)

다른 카테고리의 글 목록

자바 기본 공부/기초 이론 카테고리의 포스트를 톺아봅니다