쓰레드
자바의 정석 책과 안드로이드 앱스쿨에서 공부한 내용을 정리한 내용입니다.
프로세스 : 쓰레드 = 공장 : 일꾼에 비유할 수 있어요
우리가 쓰는 프로그램은 대부분 멀티 쓰레드 방식을 쓰고 있다.
장점
단점
+ 동기화에 주의해야 한다.
+ 교착상태가 발생하지 않도록 주의해야 한다.
+ 각 쓰레드가 효율적으로 고르게 실행될 수 있게 해야 한다.
class MyThread extends Thread{
public void run(){
}
}
2. Runnable 인터페이스를 구현
class MyThread2 implements Runnable{
public void run(){
}
}
//Thread클래스를 상속받을 때 사용법
MyThread t1 = new MyThread(); // 쓰레드의 생성
t1.start();//쓰레드의 실행
//Runnable인터페이스의 구현
Runnable r = new MyThread2();
Thread t2 = new Thread(r);
r2.start();
여기서 알 수 있는 내용이 start()
를 사용하면 쓰레드를 실행 시킬 수 있습니다.
현재 쓰레드를 지정된 시간동안 멈추게 한다.
try{
Thread.sleep(1,5000000);//쓰레드를 0.0015초를 멈추게한다.
}catch(InterruptedException e){}
대기상태인 쓰레드를 실행대기 상태로 만든다.
{
ThreadEx13_2 th1 = new ThreadEx13_2();
th1.start();
th1.interrupt();
System.out.println(th1.isInterrupted);
}
void suspend() // 쓰레드를 일시정지 시킨다.
void resume() // suspend()에 의해 일시정지된 쓰레드를 실행대기 상태로 만든다.
void stop()// 쓰레드를 즉시 종료시킨다.
지정된 시간동안 특정 쓰레드가 적업하는 것을 기다린다.
void join() // 작업이 모두 끝날 때까지
void join(long millis) // 천분의 일초동안
void join(long millis, int nanos) //천분의 일초 +나노초 동안
남은 시간을 다음 쓰레드에게 양보하고 , 자신은 실행대기한다.
쓰레드의 동기화란? 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것
임계영역
으로 설정한다.synchronized로 임계영역을 설정하는 방법 2가지
// 메서드 전체를 임계 영역으로 지정
public synchronized void calcsum(){
}
// 특정한 영역을 임계 영역으로 지정
synchronized(객체의 참조변수){
}