sleep()
지정된 시간동안 쓰레드를 멈춘다.
class Test_01 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 100; i++) {
System.out.print("1");
}
System.out.println("Runnable 종료");
}
}
class Test_02 extends Thread {
public void run() {
for (int i = 0; i < 100; i++) {
System.out.print("2");
}
System.out.println("Thread 종료");
}
}
public class ExThreadExControl {
public static void main(String[] args) {
Test_01 rb = new Test_01();
Thread test01 = new Thread(rb);
Test_02 test02 = new Test_02();
test01.start();
test02.start();
try {
Thread.sleep(3000); //메인에만 영향을 미친다
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("메인종료");
}
}
interrupt()
쓰레드에게 작업을 멈추라고 요청한다. 강제 종료는 아니다.
import java.util.Scanner;
class Test_In_01 extends Thread{
@Override
public void run() {
int i = 1;
while (!isInterrupted()) {
System.out.println(i++);
for (long j = 0; j < 2000000000L; j++);
}
System.out.println("쓰레드 종료");
}
}
public class ExThreadInterrupt {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Test_In_01 test01 = new Test_In_01();
test01.start();
System.out.println("값 입력");
int a = sc.nextInt();
System.out.println("입력 값 = " + a);
test01.interrupt();
System.out.println("메인 종료");
}
}
join()
다른 쓰레드의 작업을 기다림
class Test_join_01 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.print("R");
}
System.out.println("Runnable 종료");
}
}
class Test_join_02 extends Thread {
@Override
public void run() {
for (int i = 0; i < 200; i++) {
System.out.print("T");
}
System.out.println("Thread 종료");
}
}
public class ExThreadJoin {
public static void main(String[] args) {
Test_join_01 rb = new Test_join_01();
Thread test1 = new Thread(rb);
Test_join_02 test2 = new Test_join_02();
test1.start();
test2.start();
try { //메인쓰레드가 test1과 test2의 작업이 끝날 때까지 기다림
test1.join();
test2.join();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("메인종료");
}
}
yield()
다른 쓰레드에게 양보한다
class Test_Y_01 implements Runnable {
@Override
public void run() {
for (int i = 0; i < 50; i++) {
System.out.print("R");
}
}
}
class Test_Y_02 extends Thread {
public boolean work = true;
@Override
public void run() {
for (int i = 0; i < 50; i++) {
if (!work) {
Thread.yield();
}
System.out.print("T");
}
}
}
public class ExThreadYield {
public static void main(String[] args) {
Test_Y_01 rb = new Test_Y_01();
Thread test01 = new Thread(rb);
Test_Y_02 test02 = new Test_Y_02();
test02.start();
test01.start();
test02.work = false;
// test02.work = true;
System.out.print("메인종료");
}
}
suspend()
쓰레드 정지
resume()
suspend()로 정지된 쓰레드를 실행대기로 만듬
stop()
쓰레드 종료
위 3개는 deprecated 이므로 사용하지 말자
'프로그래밍 > JAVA' 카테고리의 다른 글
쓰레드 wait()과 notify() (0) | 2021.09.29 |
---|---|
쓰레드의 동기화 (0) | 2021.09.27 |
쓰레드 상태 및 과정 (0) | 2021.09.24 |
쓰레드 IO블락킹과 데몬쓰레드 (0) | 2021.09.23 |
프로세스와 쓰레드(이해와 구현) (0) | 2021.09.19 |