자바 스레드 처리

자바 스레드 처리


@ . 멀티스레드와 API
스레드란 ? 시작점과 종료점을 가지는 일련된 하나의 작업흐름
멀티스레드의 정의 : 여러개의 시작점과 종료점의 프로그래밍을 가지는 일련의 동작

  • . 멀티스레드는 CPU의 시분할 개념(Time Sharing)의 작동 방식에 근거한다.
    시분할 개념이란 프로그램에 정해진 순서대로 단시간에(약 100밍이초)씩 실행 시간을 주어
    되풀이 해서 일정 기간에 복수의 프로그램을 실행할수 있는 시스템
    즉 시간을 세분화해서 사용하는 한편 동시복수의 일을 처리하는 것처럼 보이는 형식

  • . 스레드의 생성방법 : java.lang.Thread클래스를 상속받아 구현하거나 .
    java.lang.Runnable인터페이스를 구현한다 .

  • . 스레드 상속 작성 방법

  1. 스레드를 상속받는 클래스를 작성.
  2. run() 메서드를 오버라이딩하여 내용부를 구현
  3. main()메서드 내부레서 스레드를 상속받은 클래스의 객체를 생성
  4. 해당 객체의 start() 메서드를 호출.
  • . Runnable 구현 작성 방법
  1. Runnable을 구현하는 클래스를 작성
  2. Run() 메서드를 오버라이딩하여 내용부를 구현
  3. main() 메서드에서 Runnable을 구현한 클래스의 객체를 생성
  4. Thread 객체를 생성하여 매개변수로 3번의 객체를 대입.
  5. Thread 객체의 start() 메서드를 호출

@ . Thread 클래스

1. 생성자(Constructs)


생성자 내용
Thread() 기본 Thread 객체
Thread(String name) 특정 이름을 가진 Thread 객체
Thread(Runnable target) target을 실행 스레드로 가지는 객체
Thread(Runnable target, String name target을 실행스레드로 특정 이름을 가지는 객체

2 . 메서드 (Method)


turn_type Method 내용
static int activeCount() 현재 활동중인 스래드 개수
static Thread currentThread() 현재 시점에 수행 중인 Thread 객체
static int enumerate(Thread[] tarray) 현재 활동중인 모든 스레드를 tarray 배열에 저장
String getName() 스레드의 이름 얻음
int getPriority() 스레드의 우선순위 값 얻음
void interrupt() 스레드를 멈춤
static boolean interrupted() 현재 스레드가 인터럽트 되었는지 확인
boolean isAlive() 스레드가 현재 살아 있는지 확인
boolean isDaemon() 데몬 스레드 인지 확인
boolean isInterrupted() 스레드가 인터럽트 되었는지 확인
void join() 다른 스레드를 멈추고 이 스레드를 끝까지 실행
void join(long sec) 다른 스레드를 멈추고 이스레드를 sec밀리초만큼 실행
void setDaemon(boolean bool) 스레드의 데몬여부 결정
void setName(String name) 스레드의 이름값 설정
void setPriority(int pri) 스레드의 우선순위 설정(1~10)
static void sleep(long sec) sec 밀리초만큼 현재 실행 중인 스레드 멈춤
void start() 스레드 실행 메서드
static void yield() 현재 실행중인 스레드를 멈추고 다음 계획된 스레드 실행

@ . 예제


Ex.1) Runnable을 구현하는 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class A1 implements Runnable {
public void run() {
System.out.println("\nHere is MyThread !!");
for (int i = 0; i < 100; i++) {
for (char ch = 'A'; ch <= 'z'; ch++) {
System.out.println(ch);
}
}
}
}

public class Round15_Ex01 {
public static void main(String[] ar) {
System.out.println("Main Thread!!!");
A1 mt = new A1();// Runnable 객체생성
Thread myth = new Thread(mt);// Thread 객체생성
myth.start();
for (int i = 1; i < 1000; i++) {
System.out.print(i);
if (i % 10 == 0)
System.out.println();
else
System.out.println("\t");
}
System.out.println("\nMain Thread Destroy!!");
}
}

Ex.2) 스레드를 상속받은 클래스

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
class A2 extends Thread {
public void run() {
System.out.println("\nHere is MyThread !!");
for (int i = 0; i < 100; i++) {
for (char ch = 'A'; ch <= 'z'; ch++) {
System.out.print(ch);
}
}
}
}

public class Round15_Ex01 {
public static void main(String[] ar) {
System.out.println("Main Thread!!!");
A2 mt = new A2();// Thread 객체생성
mt.start();
for (int i = 1; i < 1000; i++) {
System.out.print(i);
if (i % 10 == 0)
System.out.println();
else
System.out.println("\t");
}
System.out.println("\nMain Thread Destroy!!");
}
}

Share