728x90
반응형
자바에서 스레드 만들기
- java.lang.Thread 클래스를 이용하는 방법
- java.lang.Runnable 인터페이스를 이용하는 방법
Thread 클래스를 이용한 스레드 생성
class MyThread extends Thread{
@Override
public void run(){
...//run 오버라이딩
}
}
run()메소드를 스레드 코드라고 부름.
run()메소드에서 스레드 실행 시작
MyThread mythread= new MyThread();
mythread.start();
스레드 객체를 생성하고,
start() 메소드를 호출하여 스레드를 시작할 수 있다.
Runnable 인터페이스로 스레드 만들기
class MyThread implements Runnable{
@Override
public void run(){
... //run()메소드 구현
}
}
Thread mythread = new Thread(new MyThread());
mythread.start();
이 방법으로 만든 스레드는
스레드객체 생성시 Thread생성자의 인자로 내가만든 클래스 객체를 넣어줘야 함
스레드 동기화(Thread Synchronization)
멀티스레드 프로그램 작성 시,
다수 스레드가 공유 데이터에 동시에 접근하는 경우 예상치 못한 결과가 발생할 수 있다.
이 문제를 해결하기 위해 스레드 동기화를 사용할 수 있다.
(한 스레드가 공유 데이터에 대한 작업을 끝낼 때까지 다른 스레드가 대기하도록 함)
자바에서 스레드 동기화 방법
- synchronized로 동기화 블록 지정
- wait() - notify() 메소드로 스레드 실행 순서 제어
synchronized
한 스레드가 독점 실행해야 하는 부분(동기화 코드)을 표시.
synchronized블록에 대한 컴파일러의 처리
- 먼저 실행한 스레드가 모니터(독점적으로 사용할 권한) 소유
- 모니터를 소유한 스레드가 모니터를 내놓을 때까지 다른 스레드는 대기
synchronized 코드 블록을 작성
void execute()
{
..
synchronized(this)
{
int n=getCurrentSum();
n+=10;
setCurrentSum(n);
}
...
}
synchronized 메소드를 작성할 수도 있다.
synchronized void add(){
int n=getCurrentSum();
n+=10;
setCurrentSum(n);
}
wait() notify()
wait() : 다른 스레드가 notify()를 불러줄 때까지 기다린다.
notify(): wati()을 호출하여 대기중인 스레드를 깨우고 RUNNABLE상태로 만든다.(두개 이상이 있어도 한 스레드만 깨움)
notify(): wait()을 호출하여 대기중인 스레드를 모두 깨운다.
728x90
반응형
'2022-2 > 자바' 카테고리의 다른 글
[자바] 인터페이스 (0) | 2022.12.18 |
---|---|
[자바] 제네릭과 컬렉션 (0) | 2022.12.18 |
[자바] 네트워크 (0) | 2022.12.17 |
[자바] ArrayList<클래스> 형의 정렬방법 (0) | 2022.12.12 |
[자바] 멀티스레드, synchronized (0) | 2022.12.01 |
댓글