☕ TarzanRun.java
public class TarzanRun implements Runnable {
int max;
public TarzanRun(int max) { this.max = max; }
@Override
public void run() {
String lyric = "%s : 타잔이 %d원짜리 팬티를 입고 %d원짜리 칼을 차고 노래를 한다.";
for (int i = 0; i < max; i++) {
try {
Thread.sleep(2000);
System.out.printf(
(lyric) + "%n", Thread.currentThread().getName(),
i * 10, (i + 1) * 10
);
} catch (InterruptedException e) {
// 🛑
//System.out.println("네.");
//return;
}
}
}
}
☕ Ex01.java
Thread tarzanThread = new Thread(new TarzanRun(100));
// 💡 쓰레드에 이름 붙이기
//tarzanThread.setName("타잔송");
tarzanThread.start();
☕ PrintThrNoRun.java
public class PrintThrNoRun implements Runnable {
int no;
public PrintThrNoRun(int no) {
this.no = no;
}
@Override
public void run() {
for (int i = 0; i < 20; i++) {
System.out.print(no);
// 시간지연
for (int j = 0; j < Integer.MAX_VALUE; j++) {}
}
}
}
☕ Ex02.java
Thread thr0 = new Thread(new PrintThrNoRun(0));
Thread thr1 = new Thread(new PrintThrNoRun(1));
Thread thr2 = new Thread(new PrintThrNoRun(2));
// 💡 쓰레드의 우선순위 정하기
// - 기본적으로는 같은 우선권을 갖고 있음 (랜덤 결과)
// - 메인에서 상속받아 기본 5
// - 아래의 그룹들을 각각 활성화하여 다시 실행해 볼 것
// - ⚠️ 너무 기대는 말 것 (응?)
// 💡 각 값이 1~10의 정수임 확인
// - 클수록 우선순위가 높음
//thr0.setPriority(Thread.MIN_PRIORITY);
//thr1.setPriority(Thread.NORM_PRIORITY);
//thr2.setPriority(Thread.MAX_PRIORITY);
//thr0.setPriority(Thread.MAX_PRIORITY);
//thr1.setPriority(Thread.NORM_PRIORITY);
//thr2.setPriority(Thread.MIN_PRIORITY);
// ⭐️ JVM에게 힌트만 줄 뿐... 실제 컨트롤은 OS가 함
// - 우선순위를 정해줘도 OS가 무시하면 그만임
// - 빈도에 살짝 영향? 국민청원/국민제안 정도로 기대
thr0.start();
thr1.start();
thr2.start();
// 위의 start들을 주석처리하고 실행
// 💡 yield : 같은 우선순위일 시 다른 쓰레드에 양보
new Thread(() -> {
for (int i = 0; i < 20; i++) {
System.out.print(3);
for (int j = 0; j < Integer.MAX_VALUE; j++) {}
Thread.yield(); // ⭐
}
}).start();
for (int i = 0; i < 20; i++) {
System.out.print('M');
for (int j = 0; j < Integer.MAX_VALUE; j++) {}
}
// ⭐ yield 역시 힌트만 줄 뿐 결정은 OS가 내림
// - 환경과 상황마다 무의미할 수도