인프런 강의 "더 자바, JAVA8"(백기선님)의 강의를 듣고 정리한 글 입니다.
JAVA8에 추가된 핵심 기능들을 이해하기 쉽게 설명해 주시니 한번씩 들어보시는 것을 추천드립니다.
public class App {
public static void main(String[] args) {
MyThread myThread = new MyThread();
myThread.start();
System.out.println("hello!");
}
static class MyThread extends Thread {
@Override
public void run() {
System.out.println("Thread : " + Thread.currentThread().getName());
}
}
}
위 코드의 결과는 Thread ~가 먼저 출력될 것 같지만 Thread의 순서는 보장을 받지 못하기 때문에 hello가 먼저 출력될 수도 있다.
public class App {
public static void main(String[] args) {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("Thread : " + Thread.currentThread().getName());
}
});
thread.start();
System.out.println("hello : " + Thread.currentThread().getName());
}
}
java8 이후에는 람다를 사용하여 구현할 수도 있다.
public class App {
public static void main(String[] args) {
Thread thread = new Thread(() -> System.out.println("Thread : " + Thread.currentThread().getName()));
thread.start();
System.out.println("hello : " + Thread.currentThread().getName());
}
}
쓰레드 주요 기능
public class App {
public static void main(String[] args) {
Thread thread = new Thread(() -> {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Thread : " + Thread.currentThread().getName());
});
thread.start();
System.out.println("hello : " + Thread.currentThread().getName());
}
}
public class App {
public static void main(String[] args) throws Exception{
Thread thread = new Thread(() -> {
System.out.println("Thread : " + Thread.currentThread().getName());
while(true) {
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
System.out.println("exit");
return;
}
}
});
thread.start();
System.out.println("hello : " + Thread.currentThread().getName());
Thread.sleep(3000L);
thread.interrupt(); // 쓰레드 깨우기
}
}
public class App {
public static void main(String[] args) throws Exception{
Thread thread = new Thread(() -> {
System.out.println("Thread : " + Thread.currentThread().getName());
try {
Thread.sleep(3000L);
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
});
thread.start();
System.out.println("hello : " + Thread.currentThread().getName());
thread.join();
System.out.println(thread + "is finished"); // 3초 후 출력
}
}