프로그래밍 정리/자바

쓰레드(Thread)

주누다 2013. 7. 6. 21:11
반응형

프로세스와 쓰레드

- Process

-> 실행중인 프로그램

=> ex) word, 스타크래프트


Thread

-> 프로세스 내부에서 실행되는 일련의 작업

=> ex) save or print, SCV or Hydra



자바의 Thread란?

-> 실행중인 프로그램 내의 순차적 제어흐름들

-> 자바 프로그램

=> main 쓰레드가 main() 함수 수행

=> finalize 쓰레드가 finalize() 함수 수행

-> 다중 쓰레드 프로그램

=> 동시에(concurrently) 여러 가지 작업을 할 수 있음

-> 이점

=> 실행속도

=> 빠른 반응 시간

=> 동시성을 갚는 프로그램을 쉽게 작성

-> 다중 프로세스와 다중 쓰레드

=> 성능과 크기

=> 통신의 효율성


Thrad의 상태

- 쓰레드의 생성

-> 쓰레드의 시작


- Runnable

-> 쓰레드가 활동 가능한 상태

=> 실행 Queue : 실제로 CPU를 점유한 하나의 쓰레드 만이 존재

=> 실행 대기 Queue : CPU를 점유하기 위해 실행 대기 중인 Runnable 상태의 여러 쓰레드가 존재


- Not Runnable

-> 쓰레드의 활동이 불가능한 상태


- Dead

-> 쓰레드의 종료




Thread 생성

-> Thread 상속

=> 쓰레드 생성 -> start() -> run()

=> run()은 반드시 재정의해야함.

=> Thread클래스의 멤버 사용가능


==================================================================================================================




class NewThread extends Thread{

@Override

public void run() {

// TODO Auto-generated method stub

super.run();

}

}


public class NewThreadMain {

public static void main(String[] args) {

NewThread n = new NewThread(); // 쓰레드의 생성

n.start(); // 쓰레드의 시작

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

n.setName("쓰레드래!");

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

try{

Thread.sleep(2000);

System.out.println(n.toString());

}catch (Exception e) {

// TODO: handle exception

}

}

}


==================================================================================================================








Runnable 구현

- Runnable 인터페이스 구현

-> run()을 반드시 재정의

-> Thread 클래스의 멤버들을 사용하지 못함

-> 단, sleep()은 static이기 때문에 사용가능


==================================================================================================================




class SoloRunnable implements Runnable{


private int number = 0;

public SoloRunnable(int n) {

// TODO Auto-generated constructor stub

System.out.println(":쓰레드 시작");

number = n;

}

@Override

public void run() {

// TODO Auto-generated method stub

int i = 0;

while(i < number){

System.out.print(i + "\t");

i++;

}

System.out.println(":쓰레드 종료");

}

}



public class SoloRunnableMain{

public static void main(String[] args) {

new Thread(new SoloRunnable(10)).start();

}

}


==================================================================================================================

반응형