프로세스
- 실행중인 애플리케이션자바 애플리케이션에서 가장 먼저 실행되는 main
메서드를 실행시키는 스레드
순차적으로 실행시키고, 코드가 끝나거나 return문을 만나면 실행 종료
여러 스레드가 동시에 작업을 수행
메인 스레드 외 별도의 작업 스레드 생성 실행
- 첫번째 방법
Runnable 인터페이스를 구현한 객체에서run()
을 구현하여 생성 실행public class ThreadExample1 { public static void main(String[] args) { //Runnable 인터페이스를 구현한 객체 생성 Runnable task1 = new ThreadTask1(); //Runnable 구현 객체를 인자로 전달하면서 Thread 클래스를 인스턴스화하여 스레드 생성 Thread thread1 = new Thread(task1) // Thread thread1 - new Thread(new ThreadTask1()); //한줄로 작성 가능 thread1.start(); //작업 스레드 실행 } } // Runnable 인터페이스를 구현하는 클래스 생성 class ThreadTask1 implements Runnable { public void run() { //스레드가 수행할 작업 내용 작성 for (int i = 0; i < 100; i++) { System.out.print("*"); } }
- 두번째 방법
Thread 클래스를 상속 받은 하위 클래스에서run()
을 구현하여 생성 실행public class ThreadExample2 { public static void main(String[]args) { //Thread 클래스를 상속받은 클래스를 인스턴스화하여 스레드 생성 //Thread 클래스를 직접 인스턴스화 하지 않음 ThreadTask thread2 = new ThreadTask(); //작업 스레드를 실행 thread2.start(); } } //Thread 클래스를 상속받는 클래스 생성 class ThreadTask2 extends Thread { public void run() { //스레드가 수행할 작업 내용 작성 for (int i = 0; i <100; i++) { System.out.print("*"); } }
- 익명 개체를 사용하여 스레드 생성 실행
- Runnable 익명 구현 객체를 활용
//익명 Runnable 구현 객체를 활용하여 스레드 생성 Thread thread1 = new Thread(new Runnable() { public void run() { 수행할 작업 내용 } }
2.Thread 익명 하위 객체를 활용
//익명 Thread 하위 객체를 활용한 스레드 생성 Thread thread2 = new Thread() { public void run() { 수행할 작업 내용 } }
스레드 이름 조회 / 출력
추가 생성한 스레드 기본 이름 Thread-n
getName()
/ setName()
Thread thread1 = new Thread(new Runnable() //익명 러너블 구현 객체로 스레드 생성
public void run() {
System.out.printls("스레드 이름");
}
};
thread1.start(); //스레드 실행
System.out.println(thread1.getName()); // 스레드 이름 조회
//출력 Thread-0
thread1.setName("Hello"); // 스레드 이름 변경
System.out.println(thread1.getName())
//출력 Hello
currentThread()
//실행중인 스레드 안
System.out.println(Thread.currentThread().getName()); //현재 스레드의 이름 가져오기
getState()
: 스레드의 현재 상태 출력
try { Thread.sleep(1000); } catch (Exception error) {}
Thread.sleep(1000);
- 스레드를 일시 정지시키는 메서드 / 대기열에 있는 다른 스레드가 실행됨.
- Thread.sleep() 메서드는 반드시 try-catch 문의 try 블럭에 작성해주어야함.
- (1000) 1초동안 동작 멈추기
문제 발생 예제 코드
임계 영역 지정하지 않았을 때 오류 출력
정상 출력
start()
스레드를 실행 대기 상태로 만들어 준다.
sleep(long milliSecond)
: 스레드의 실행을 잠시 멈춤
인자로 전달한 시간만큼 경과하거나 interrupt()
호출한 경우 다시 실행 대기로 복귀
intrerrupt()
: 일시 중지 상태인 스레드를 실행 대기 상태로 복귀
드디어 부트캠프 한달이 지나고 자바 파트가 끝났다. 너무 짧은 시간에 정신없이 지나가서 제대로 잘 배우고 이해한건지 걱정이 된다. 계속 복습하고 실습해보면서 익혀야 할 것 같다. 주말동안 객체지향개념부터 다시 봐야겠다. 다음주에는 섹션2 시작이다. 힘내자😃