본문 바로가기

JAVA

15장 스레드


스레드가 먼가를 아는가가 중요 하다.

컴퓨터는 원래 하나만 처리 할 수 있으나 여러개가 처리하는 것처럼 보이도록 사기치는것

이렇게 만들기 위해서는
 Thread라는 클래스가 있다.
메인 메소드를 제외하고 가장 최초로 호출되는 메소드는 run()이라는 메소드이다.
인터페이스로 Runable 을 구현한다음에 Thread한테 인자를 넘겨 준다.

멀티스레딩
-다른 작업은 방해하지 않으면서 동시에 메시디를 불러오는 작업을 할 수 있어야 한다.
-스레드르 여러개 만들어서 여러개의 작업을 거의 동시에 수행할수 있도록 하면 된다.
자바에서의 멀티스레딩
-자바api에 들어있는 Thread클래스 사용
-java.lang.Thread
    Thread t = new Thread();
    t.start();

스레드
-하나의 cup에서 여러 작업을 동시에 돌리는 것을 멀티스레딩이라고 한다.
-멀티태스킹과 달리 환경의 대부분을 공유함
-각 스레드마다 하나씩의 호출 스택이 있음


멀티스레딩과 호출 스택
1.JVM에서 main()메소드호출
2.main()에서 새로운 스레드 시작
3.두 스레드가 종료될 때까지 새 스레드와 원래 스레드 사이를 왔다갔다함


새로운 스레드를 시작하는 방법
1.Runnable 객체 만들기
- Runnalbe threadjob = new MyRunnable();
2.Thread객체를 만들고 그 객체에 Runnable객체전달
Thead myThread = new Thead(threadjob);
3.Thread 객체의start() 메소드호출
myThread.start();

run()메소드
메소드Thread 객체== 일꾼
Runnable 객체== 일꾼이할일
run() 메소드
-public void run() {
--// 새로운스레드에서실행시킬코드
--}
Runnable 객체를Thread 생성자에젂달하는것은Thread에run() 메소드를구하는방법을알려주는것이라고할수있습니다.


스레드 스케줄러
-스레드의 상태를 관리함
-사용자 마음대로 제어할 수 없음
-스케줄링과 관련하여 어떤 것도 확실하게 단언할 수 없음
-스케줄러가 어떤 특별한 방식으로 작동할 것 을 가정하고 프로그램을 만들면 절대 안됨
왜냐!!!(스케줄러의 불확정석 때문이다. )머가 먼저 되고 머가 나중에 되고 하면 안된다.

 
Thread.sleep()메소드
-스레드를 대기 상태로 보내주는 메소드
-대기상태에서 벗어난 스레드는 항상 실행 가능한 상태로 돌아감

     Thread.sleep(2000);           //2초간 실행을 죽인다.
-이 메소드를 적당히 활용하면 각 스레드에서 공평하게 순번을 할당 받도록 해줄 수 잇다.

여러 개의 스레드


병행성 문제
단점이 있다
-두개 이상의 스레드가 어떤 객체에 있는 하나의 데이터에 접근하게 되는 경우
-서로 다른 두 스택에서 실행되는 메소드가 객체에 있는 동일한 객체에 대한 게터 또는 세터 메소드를 호출하게 되는 경우

synchronized키워드(동기화)
-어떤메소드를 한 번에 스레드만 접근할 수 있도록 만들 때는 synchronizedㄹ라를 키워드를 쓰면 된다.
-싱크로 어쩌구 키워드는 그동기화된 코드에 접근하려면 스레드가 열쇠를 가지고 있어야 한다는 것을 의미



객체의 락
-모든 객체에는 락이 있는데, 동기화된 메소드가 있을 때만 그 락이 작동합니다.
-객체에 하나 이상의 동기화된 모세드가 있으면 그 객체의 락에 맞는 열쇠를 가지고 있는 스레드만 동기화된 메소드를 호출할 수 있다.
-어떤스레드에서동기화된메소드를호출하게되면우선열쇠를찾습니다. 열쇠가있으면열쇠로락을잠그고들어가서작업이끝날때까지그열쇠를젃대내주지않습니다.
-그스레드가열쇠를돌려놓기젂까지는다른스레드에서젃대그객체의동기화된메소드를쓸수없습니다.

동기화도 완벽한게 아니라 단점이 있다.
-과부화가 있다.
-어느 한쪽이 일을 끝마칠 때 까지 한쪽은 기다리고 있어야 한다.


요약:
스레드는 Thread와 Runnable이 필요 하다.
동기화(synchronized)
스케쥴러는 예측 못하고 지 맘대로 일을 한다.
sleep이라는 메소드를 써서 단계적으로 이용 가능하지만..안전하지는 않다. 별로..머..




'JAVA' 카테고리의 다른 글

java 시험 관련  (0) 2010.09.03
16장  (0) 2010.09.03
자바 11장(예외처리)  (0) 2010.08.31
자바 10장  (0) 2010.08.31
자바용어 2  (0) 2010.08.23