일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- html
- String
- springframework
- jsp
- 다형성
- spring
- Method
- 상속
- JavaScript
- 데이터베이스
- 자바
- list
- 윈도우 #단축키
- css
- File 클래스
- 파일 입출력
- 연락처 프로그램
- GUI
- 설치
- 오라클
- jQuery
- 연산자
- array
- 코틀린#클래스#상속
- javaservlet
- Event
- function
- kotlin #return #jump
- Java
- property
- Today
- Total
Binary World
JAVA CLASS : 쓰레드(Thread) 본문
<쓰레드(Thread)>
* 쓰레드(Thread): 하나의 작업을 순차적으로 진행하는 실행 코드
* 멀티 쓰레드 프로그램:
* 하나의 프로그램에서 여러개의 쓰레드를 실행시켜 동작하는 프로그램
(예) 채팅 프로그램: 채팅 + 파일 전송
* 자바에서 쓰레드를 생성하고 사용하는 방법 1 => ThreadMain01.java
1. Thread 클래스를 상속받는 클래스를 정의 (extends Thread)
2. 정의한 새로운 클래스 안에서 run() 메소드를 override
-> run(): 쓰레드가 해야 할 기능들을 구현
3. 정의한 클래스의 인스턴스를 생성
4. 생성된 인스턴스에서 start() 메소드를 호출
-> 쓰레드 가져야 할 메모리 공간을 확보, 스케쥴링을 위해서 쓰레드를 등록, 초기화
-> 쓰레드의 run() 메소드가 자동으로 실행됨
* 자바는 다중 상속을 허용하지 않기 때문에 다른 클래스를 이미 상속 받고 있는 경우에는 Thread 클래스를 상속받을 수 없음.
* Runnable 인터페이스를 구현해서 Thread를 생성할 수 있는 방법을 제공.
* 자바에서 쓰레드를 생성하고 사용하는 방법 2 => ThreadMain03.java
1. Runnable 인터페이스를 구현하는 클래스를 정의
2. 정의한 클래스에서 run() 메소드를 override
-> 쓰레드가 해야 할 기능 구현
3. 정의한 클래스(Runnable 구현 클래스)의 인스턴스 생성
4. Runnable 인스턴스를 매개변수로 해서 Thread 인스턴스를 생성
new Thread(runnable); 호출
Thread 인스턴스에서 start() 메소드를 호출 -. run() 자동 호출
<프로그램 코드>
* TreadMain01.java
package edu.java.thread01; // 1. Thread 클래스를 상속받는 새로운 클래스 정의 class MyThread extends Thread { // 멤버 변수(필드) private String msg; // 생성자 public MyThread(String msg) { this.msg = msg; } // 메소드 // 2. run() 메소드를 override - 쓰레드가 해야 할 기능들을 구현 @Override public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " : " + msg); try { sleep(10); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 10 milli second 동안 일을 멈춤 } // end for } // end run() } public class ThreadMain01 { public static void main(String[] args) { // 3. 정의한 클래스의 인스턴스를 생성 MyThread my = new MyThread("안녕"); // 4. 생성된 인스턴스에서 start() 메소드를 호출 - 쓰레드 실행 my.start(); // 별도의 메모리 공간을 확보해서 실행됨 Thread th2 = new MyThread("hello"); th2.start(); // my.run();// 쓰레드를 생성하는 것이 아니라 인스턴스를 호출하는 것임 // join(): 해당 쓰레드가 종료될 때까지 기다림 System.out.println("<<<<< 메인 쓰레드 종료 >>>>>"); } // end main() } // end class ThreadMain01 |
* 출력화면
<<<<< 메인 쓰레드 종료 >>>>> 0 : hello 0 : 안녕 1 : hello 1 : 안녕 2 : hello 2 : 안녕 3 : hello 3 : 안녕 4 : hello 4 : 안녕 5 : hello 5 : 안녕 6 : 안녕 6 : hello 7 : 안녕 7 : hello 8 : hello 8 : 안녕 9 : 안녕 9 : hello |
* ThreadMain03.java
package edu.java.thread03; class MyRunnable implements Runnable {
// 멤버 변수 private String msg; public MyRunnable(String msg) { this.msg = msg; } @Override public void run() { for (int i = 0; i< 10; i++ ){ System.out.println(i + " : " + msg); try { Thread.sleep(100); // Thread 메소드에 있기 때문에 직접 불러와야한다. } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } // end run()
} public class ThreadMain03 { public static void main(String[] args) { MyRunnable r1 = new MyRunnable("안녕"); Runnable r2 = new MyRunnable("ㅎㅎ");
Thread th1 = new Thread(r1); Thread th2 = new Thread(r2);
th1.start(); th2.start(); System.out.println("<<<<< 메인 쓰레드 종료 >>>>>");
} // end main() } // end class ThreadMain03 |
* 출력화면
<<<<< 메인 쓰레드 종료 >>>>> 0 : ㅎㅎ 0 : 안녕 1 : ㅎㅎ 1 : 안녕 2 : 안녕 2 : ㅎㅎ 3 : ㅎㅎ 3 : 안녕 4 : ㅎㅎ 4 : 안녕 5 : 안녕 5 : ㅎㅎ 6 : ㅎㅎ 6 : 안녕 7 : 안녕 7 : ㅎㅎ 8 : 안녕 8 : ㅎㅎ 9 : 안녕 9 : ㅎㅎ |
'개발자의 길 > JAVA' 카테고리의 다른 글
JAVA CLASS : 파일 입출력(File 클래스) 02 - Serializable (0) | 2017.01.16 |
---|---|
JAVA CLASS : 파일 입출력(File 클래스) 01 - 기본 정의 및 사용 (0) | 2017.01.12 |
JAVA CLASS : 예외(Exception) (0) | 2017.01.12 |
JAVA CLASS : Inner Class(내부 클래스) (0) | 2017.01.12 |
JAVA CLASS : Inner Class (연습문제 4, 5) (0) | 2017.01.10 |