스레드

5BRack·2022년 7월 4일

자바란?

목록 보기
23/42

프로그램

  • 하드디스크에 저장된 파일들의 모임(정적)

프로세스

  • 프로세스는 메모리상에 로딩된 프로그램 (동적)

    하드디스크와 CPU의 처리속도 차이는 엄청나다. 이를 완화시키는 것이 메모리 이다. 이 메모리상에 로딩된 프로그램이 프로세스이다.

스레드

  • CPU를 사용하는 최소단위
  • 프로세스 내부에서 사용되는 최소단위
  • 쓰레드는 프로세스내 메모리를 공유한다.
  • Stack 메모리는 공유하지 않음
  • main 메서드도 하나의 스레드이다.

    멀티스레드 - 2개이상의 스레드가 동작

스레드의 동시성 , 병렬성

  • 단일 스레드로 2개의 작업을 처리할 때 각 작업은 순차적으로 처리 하지만 멀티스레드에서는 동시성 또는 병렬성을 갖고 처리
  • 동시성 - 처리할 작업의 수가 CPU코어 수보다 많을 때다. 매우 짧은 간격으로 번갈아 실행 → 동시에 처리되는 것 처럼 처리
  • 병렬성 - CPU의 코어수가 작업수 보다 많을 때 이때는 각각의 작업을 각각에 코어에 할당해 동시에 실행할 수 있기 때문에 동시에 작업이 수행됨 이를 쓰레드의 병렬성 이라 함

    멀티 프로세싱

    멀티프로세싱은 fork를 통해 프로세스를 다수개로 늘려 여러 개의 프로그램들을 병렬로 처리

    멀티스레딩

    멀티스레딩은 하나의 프로그램 안에서 병렬 처리

스레드 생성 방법

  • 스레드를 생성하는 방법은 2가지로 나뉜다.
  • 첫번째 방법은 Thread 클래스를 상속받아 run()메서드를 오버라이딩 하는 것이다
  • 두번째 방법은 Thread 객체를 생성할 때 Runnable 객체를 생성자로 전달하는것이다.
  1. Thread 클래스를 상속
  2. run()메서드 오버라이딩
  3. 클래스 객체 생성
  4. 객체.start() 메서드 실행

    start() 메서드는 새로운 쓰레드생성/추가를 위한 모든 준비, 새로운 쓰레드 위에서 run()메서드 실행

class MYThread extends Thread{
	@Override
    public void run(){
    // 쓰레드 작업 내용
    }
}

Thread th = new Thread();
th.start();
  1. Runnable인터페이스 구현 객체 생성 후 Thread 생성자로 Runnable 객체 전달

  2. Runnable 인터페이스를 구현한 클래스 생성

  3. run 메서드 오버라이딩

  4. Thread 객체 생성 후 매개변수에 Runnable 구현객체를 입력

  5. thread 변수로 start()메서드 사용

    new Runnable 익명구현클래스로 main(실행)함수내에서 바로 구현 가능

class Myrun implements Runnable{
	@Override
    public void run(){
    	// 쓰레드 작업 내용
    }
}

Myrun mr = new Myrun();
Thread th1 = new Thread(myrun);
th1.start();

Thread th2 = new Thread(new Runnable{   //익명객체를 생성해 스레드생성
	@Override
    public void run(){
    // 쓰레드 작업 내용
    }
});

th2.start();

스레드 속성

현재 스레드 객체 참조값 얻어오기

  • Thread 객체를 직접 정의하고 객체를 생성해 사용할 때 참조 변수를 이용해 언제든지 스레드 객체의 속성을 가져올 수 있다.

Thread Thread.currenThread();

실행중인 스레드 개수 가져오기

  • 여러개의 스레드가 실행되고 있을 때 현재 실행 중인 스레드의 개수를 알고자 한다면 Thread 클래스내에 정적 메서드인 activeCount()를 사용해야 한다.

스레드 이름 설정하기

  • 여러개의 스레드를 실행하다 보면 각각의 스레드를 구분할 필요가 생긴다. 이를 구분하는 방법은 스레드마다 이름을 부여하는 것이다.

String setName(String name)

스레드 이름 가져오기

String getName()


스레드 우선 순위

  • 모든 스레드는 1~10 사이의 우선순위를 갖고 있다. 1이 가장 낮은 순위값 10이 가장 높은 순위값이다.

  • 우선 순위를 지정하지 않으면 기본값으로 5의우선순위를 갖는다.

  • 쓰레드의 동시성이 성립되어 2이상의 작업이 하나의 CPU코어에서 동작할 때 2개의 작업은 일정 시간 간격으로 번갈아면서 실행된다.

  • 이때 우선 순위가 높으면 상대적으로 많은 시간을 할당 받는다.

스레드 객체 우선순위 설정

void setPriority(int priority); //우선순위 설정

int getPriority();				//우선순위 정보 가져오기

현재 컴퓨터의 cpu 코어수를 가져오는 메서드
public native int availableProcessors();

스레드의 데몬 설정

  • 일반쓰레드가 모두 종료되면 함께 종료되는 쓰레드를 데몬 쓰레드라 한다.

  • 데몬쓰레드는 start메서드 호출전 설정되어야 한다.

  • 데몬 쓰레드는 프로세스 내의 모든 일반 쓰레드가 종료돼야 종료된다.

setDeamon(boolean);   //데몬쓰레드 설정 메서드

0개의 댓글