Thread 클래스
Thread 클래스
Single Thread : 내부에 쓰레드를 하나씩 동작 시키는 방식
Multi Thread : 내부에 쓰레드를 여러개 단위로 동작 시키는 방식
Thread 구현 방법
Tread 클래스 구현 ex) class A extends Thread 후 run 메서드 오버라이딩. 사용
Runnable 인터페이스 구현 ex) class A implements Runnable 의 run 메서드 구현. 사용
Thread 우선순위
특정 Thread가 더 많은 작업 시간을 가지도록 한다.
우선순위의 범위 1 ~ 10 까지 높을수록 우선순위가 높다. 기본 main은 5이다.
setPriority ( ) : 우선 순위값을 변경한다.
getPriority ( ) : 우선 순위값을 반환한다.
sleep ( ) : 쓰레드에 대기시간을 설정한다.
start ( ) : 쓰레드를 실행시킨다. 내부적으로 run 메서드를 호출한다.
run ( ) : start시 해당 내용을 실행한다. 오버라이드로 자신에게 맞게 적용한다.
suspend( ) : 쓰레드를 잠시 정지 시킨다.
resume ( ) : 일시정지된 쓰레드를 다시 시작한다.
stop ( ) : 실행중인 쓰레드를 강제 종료 시킨다.
import javax.swing.JOptionPane;
class ThreadEx1{
public static void main(String[] args) {
String input=JOptionPane.showInputDialog("입력"); //메세지 입력박스
System.out.println("입력한 값 = "+input);
for (int i=0; i<10; i++) {
System.out.println(i);
try{
Thread.sleep(1000); //현재 실행 Thread를 1000초만큼 대기상태.main
}catch(Exception e){}}}} //예외가 발생되므로 예외처리
-출력 결과-입력한 값 = power
0
1
2
3.....
프로그램이 실행되면 입력창이 뜨고 입력시 현재 Thread인 main이 sleep
메서드에 의해 지정된 값만큼 딜레이가 생기며 카운트 한다.
ThreadGroup 클래스
1. 서로 관려된 Thread를 그룹으로 다룰 수 있다.
2. 보안상의 이유로 도입된 개념이다.
3. 생성자를 통하여 그룹이름을 추가 및 가입할 수 있다.
activeGroupCount ( ) : Thread 내의 그룹 개수를 반환한다.
activeCount ( ) : 그룹내의 Thread 수를 반환한다.
list ( ) : Thread 그룹의 정보를 출력한다.
setMaxPriority ( ) : 해당 그룹의 우선순위를 정의한다.
class ThreadGroupEx1{
public static void main(String[] args) {
ThreadGroup main=Thread.currentThread().getThreadGroup();
ThreadGroup grp1=new ThreadGroup("그룹1"); //그룹명 그룹1 생성
ThreadGroup grp2=new ThreadGroup("그룹2");
ThreadGroup subGrp1=new ThreadGroup(grp1,"자식1:"); //grp1그룹의 서브그룹 자식1
grp1.setMaxPriority(3); //grp1 그룹의 우선순위를 3으로 set . sub그룹도 변경됨
Thread t1=new Thread(grp1,"스레드1"); //Thread생성시 grp1그룹에 속함.
Thread t2=new Thread(subGrp1,"스레드2");
Thread t3=new Thread(grp2,"스레드3");
t1.start(); //Thread 실행
t2.start();
t3.start();
System.out.println("Group Name"+main.getName());
System.out.println("Active ThreadGroup "+main.activeGroupCount()); //그룹개수
System.out.println("Active Thread "+main.activeCount()); //Thread 개수
main.list(); }} //Thread 정보 출력
-출력 결과-
Group Namemain
Active ThreadGroup 3
Active Thread 1
java.lang.ThreadGroup[name=main,maxpri=10]
Thread[main,5,main]
java.lang.ThreadGroup[name=그룹1,maxpri=3]
java.lang.ThreadGroup[name=자식1:,maxpri=3] *자식그룹은 들여쓰기
java.lang.ThreadGroup[name=그룹2,maxpri=10]
계속하려면 아무 키나 누르십시오 . . .Thread에 그룹을 부여하여 그룹단위로 관리가 가능하게 한다. 그룹안에 다시 그
룹이 들어갈 수 있다.
Deamon Thread
1. 일반 Thread의 작업을 보조한다. Thread내부의 Thread를 말한다.
2. 종료 시점은 일반 Thread가 종료될 때 강제 종료된다.
class DaemonEx1 extends Thread{ //Thread 클래스 상속
static boolean autoSave=false;
public static void main(String[] args) {
Thread t=new Thread(new DaemonEx1());
t.setDaemon(true); //setDaemon 메서드를 통한 활성화. false면 종료안됨
t.start(); //Thread 시작 (main)
for (int i=0; i<=20 ; i++ ) {
try{
Thread.sleep(1000); //20까지 conunt 하며 딜레이 발생
}catch(InterruptedException e){}
System.out.println(i);
if(i==5)
autoSave=true; } //5일때 true
System.out.println("프로그램을 종료합니다"); }
public void run(){
while(true){
try{
Thread.sleep(3*1000);
}catch(InterruptedException e){}
if(autoSave)
autoSave(); } }
public void autoSave() {
System.out.println("저장합니다"); }}
-출력 결과-
0
1
2
3
4
5
6
7
8
저장합니다
9
10
11
저장합니다
12
13
저장합니다[출처] Thread ( 쓰레드 )|작성자 stryper_top
'JAVA' 카테고리의 다른 글
이미지 태그 SRC 경로 추출 (3) | 2011.03.16 |
---|---|
파일명 추출 (2) | 2011.03.16 |
HttpURLConnection 이용시 헤더값 세팅 방법 (3) | 2011.03.03 |
java.util 패키지 (3) | 2011.03.03 |
java.net - Url 클래스 (5) | 2011.03.03 |