반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 28 | 29 | 30 | 31 |
Tags
- StringWriter
- 스레드그룸
- ThreadGroup()
- 메모리스트림
- Linux셋팅
- first-child
- 상관서브쿼리
- ObjectInputStream
- 상관 서브 쿼리
- include액션태그
- MemoryStream
- 리눅스세팅
- interrupt()
- Daemon()
- 표현 언어
- 리눅스셋팅
- interrupted()
- Linux세팅
- ID중복
- char[] String 형변환
- InputDialog
- sleep()메소드
- StringReader
- include 지시자
- 아이디중복
- first-of-child
- include지시자
- 동기화
- String char[] 형변환
- isinterrupted()
Archives
- Today
- Total
다연이네
[days26] 스레드 예제 본문
반응형
- 독립적인 2개의 스레드
package days26;
import javax.swing.JOptionPane;
public class Ex06_02 {
public static void main(String[] args) {
Runnable target = new InputThread();
Thread t1 = new Thread(target, "t1");
t1.start();
ForThread t2 = new ForThread();
t2.setName("t2");
t2.start();
System.out.println(Thread.currentThread().getName()+" =END=");
//실행하면 main만나 창 띄우고 t1스타트-> main죽고 t1입력받을때까지 멈춰있으나 t2는 독립적이니까 6번 돌릴 것
//t1과 t2는 독립적 (한쪽에선 영화다운받고 한쪽에선 채팅하고)
}
}//class
//1. 대화상자 띄워서 입력받을 스레드
class InputThread implements Runnable{
@Override
public void run() {
System.out.println("> "+Thread.currentThread().getName()+"스레드 시작");
String input = JOptionPane.showInputDialog("아무 값이나 입력하세요");
System.out.println(input);
System.out.println("< "+Thread.currentThread().getName()+"스레드 종료");
}
}
//2. for문을 돌리는 스레드
class ForThread extends Thread{
@Override
public void run() {
System.out.println(">> "+Thread.currentThread().getName()+"스레드 시작");
for (int i = 0; i <6; i++) {
System.out.printf("[%s] - %d\n", Thread.currentThread().getName(), i);
try {
Thread.sleep(1000);//1초
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("<< "+Thread.currentThread().getName()+"스레드 종료");
}
}
t1스레드와 t2스레드는 서로 독립적으로 실행되기 때문에 t1스레드가 종료되어도 t2는 계속된다.
[스레드의 상태]
NEW 스레드가 생성되고 아직 start() 메소드가 호출되지 않은 상태
RUNNABLE 실행 중 또는 실행 가능한 상태 (RUN상태(실제 일하고 있는 상태)와 구분 필요)
<-> NotRunnable은 죽은게 아니라 실행 불가능한 상태
BLOCKED 블러킹, 동기화 블럭에 의해 일시정지된 상태 (lock이 풀릴때까지 기다리는 상태)
WAITING, TIMED_WAITING 일시정지시간이 지정된 경우
TERMINATED 스레드의 작업이 종료된 상태
- 스레드 상태를 확인하는 코딩
package days26;
public class Ex07 {
public static void main(String[] args) {
노가다Worker 홍길동일꾼 = new 노가다Worker();
System.out.println("1. "+홍길동일꾼.getState()); // NEW
홍길동일꾼.start(); //바로 일하는게 아니라 Runnable상태로 빠지는 것(일 대기중인 상태)
System.out.println("2. "+홍길동일꾼.getState()); //RUNNABLE
try {
Thread.sleep(100); //일시정지하는 스레드는 누구 ? main
//(홍길동일꾼은 RUN상태가 아니라 러너블 상태)
//main이 0.1 쉬는동안 홍길동이 RUN 상태로 들어가고 메인은 RUNNABLE
} catch (InterruptedException e) {
e.printStackTrace();
}
//0.1초 후 main 스레드가 RUNNABLE 상태로 나옴
System.out.println("3. "+홍길동일꾼.getState()); //TIMED_WAITING
//홍길동일꾼 NotRunnable로 쉬러감 (1초동안 쉬는 중)
try {
Thread.sleep(5000); //main스레드 5초 sleep -> 4초쯤 홍길동 일꾼 나와서 삽질찍고 죽음
} catch (InterruptedException e) {
e.printStackTrace();
} //1초동안 쉬던 홍길동일꾼이 5초동안 나올것이다 > 삽질 마지막으로 찍고 죽었을 것
System.out.println("4. "+홍길동일꾼.getState()); //TERMINATED
}
}
class 노가다Worker extends Thread{
@Override
public void run() {
System.out.println("> 삽질...");
try { //1초 쉬는동안 main이 나온다
Thread.sleep(1000); //p750 일정시간동안 스레드를 멈추게 한다
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("> 삽질...");
}
}
sleep()메소드
1) 그 일정시간이 지나면 자동으로 그 스레드는 멈춘 것을 해제한다(실행 대기상태가 된다).
2) interrupt() 메소드가 호출되면 예외 발생해서 실행 대기 상태로 된다.
반응형
'Java' 카테고리의 다른 글
[days27] 스레드 강제종료 (0) | 2020.10.27 |
---|---|
[days26] 스레드 - 동기화의 필요성 (1) | 2020.10.26 |
[days26] 스레드(Thread) (0) | 2020.10.26 |
[days26] 직렬화(Serialization) - ObjectInputStream/ObjectOutputStream (0) | 2020.10.26 |
[days25] DataOutputStream, DataInputStream (0) | 2020.10.25 |
Comments