Thread
Thread 에서 run() 대신 start() 를 호출하는이유
프로세스나 스레드가 실행된다는 의미는 cpu 를 사용해 작업을 수행하는 것을
뜻합니다. 그런데 한번에 한가지 작업만 처리하는 것이 아니고
동시에 2가지 이상의 작업을 처리하는 멀티 프로세싱을 위해서는
cpu 스케줄링이 필요합니다. 운영체제는 보다 효율적으로
사용하기 위해 작업의 우선순위를 정해 처리합니다.
결국 cpu 의 사용권한을 정하는것은 프로그램이 아니라 운영체제의 몫입니다
start() 메서드는 스레드를 실행가능한 상태 즉 스레드가 cpu 를 사용할수 있도록
준비 상태를 만드는 역활을 합니다. 그리고 cpu 스케줄러에 의해 run() 메서드를
호출해 실제 cpu를 사용하는 상태로 바뀝니다.
스레드 우선순위 지정
여러개의 스레드 중에서 어떤 스레드가 cpu 를 사용할지는
스레드 스케줄러가 결정해 처리합니다. 따라서 자바스레드의
정확한 작동을 예측하기는 힘듭니다.
하지만 setPriority() 메서드를 이용해 우선순위를 부여할수 있습니다.
자바는 총 10단계 우선순위를 갖습니다. 그중에서 3가지 우선순위는
Thread 클래스의 멤버 상수로 정의되어 있습니다.
public class ThreadTest_8 {
public static void main(String[] args) {
Thread_8 obj1 = new Thread_8("10번");
Thread_8 obj2 = new Thread_8(" 5번 ");
Thread_8 obj3 = new Thread_8(" 1번");
Thread_8 obj4 = new Thread_8(" @@@@ 7번");
obj1.setPriority(Thread.MAX_PRIORITY); // 1~10까지 넣을수있음.
obj2.setPriority(Thread.NORM_PRIORITY);
obj3.setPriority(Thread.MIN_PRIORITY);
System.out.println("a : " + obj1.getPriority());
System.out.println("b : " + obj2.getPriority());
System.out.println("c : " + obj3.getPriority());
System.out.println("d : " + obj4.getPriority());
// 우선순위 지정하지않으면 5를 부여 => setPriority(Thread.NORM_PRIORITY);
obj3.start();
obj2.start();
obj1.start();
obj4.start();
}
}
static final int MAX_PRIORITY : 스레드가 가지는 최고 우선순위값
static final int MIN_PRIORITY : 스레드가 가지는 최소 우선순위값
static final int NORM_PRIORITY : 스레드가 가지는 보통 우선순위값

getPriority () 메서드로 PRIORITY() 메서드로 지정한 a,b,c,d 값의 우선순위를 보여줌.
Runnable
인터페이스 사용
이미 다른 클래스를 상속받아 Thread 클래스를 상속받아
사용할수 없을떄 Runnable 인터페이스를 이용합니다.
Runnable 사용 방법
1. Runnable 인터페이스를 implements 하는 클래스를 정의한다.
2. Runnable 인터페이스를 run() 메서드를 재정의합니다.
class RunnableTest implements Runnable // Runnable 인터페이스 구현
{
public void run()
{
,,,;
}
}
3. main() 메서드에서 Runnable 인터페이스를 구현한 클래스 객체를 생성
4. Thread 클래스 객체를 생성하면서 생성자에 3.에서 생성한 객체를 매개변수로 전달
5. 4. 에서 생성한 객체를 사용해 start () 메서드 호출
public static void main(String[] args)
{
Runnable obj = new Runnable(); //객체생성
Thread thread = new Thread(obj); //Thread 클래스 생성
thread.start(); // start() 메서드호출
}
사용예시 코드 ( Runnable 을 활용한 기본형식 )
class Runnable_1 implements Runnable {
public void run() {
for (int i = 0; i < 20; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" " + i + " 번 " + i + " * " + i + " = " + (i * i));
}
}
}
public class RunnableTest_1 {
public static void main(String[] args) {
Runnable_1 obj = new Runnable_1();
Thread tt = new Thread(obj);
// Thread tt = new Thread(new Runnable_1()); 위에 두줄을 이와같이 한줄로도 사용가능
tt.start();
}
}
'국비 과정 > Java' 카테고리의 다른 글
| 국비 - 0725 ( Wrapper Class , String ) (0) | 2022.07.25 |
|---|---|
| 국비 - 0722 (Synchronization(동기화)) (0) | 2022.07.22 |
| 국비 - 0720 ( 예외처리 , 쓰레드) (0) | 2022.07.20 |
| 국비 - 0719 (추상클래스 , 인터페이스) (0) | 2022.07.19 |
| 국비 - 0718 (오버로딩 , 오버라이딩 ,super) (0) | 2022.07.18 |