** 멀티쓰레드 프로그래밍 방법
<순서>
** run() 과 start() 차이 비교를 위한 예제
1. 기본구조
2. API 나온 형식
3.
** run() 과 start() 차이 비교를 위한 예제
class Person extends Thread{
private String name;
public Person(String name){
this.name = name;
}
public void run(){
for (int i = 1; i <= 10 ; i++ ){
System.out.println("Hello, " + name);
// 딜레이되는 시간 일부러 주려고 함
try{
Thread.sleep(200);
} catch(Exception e){
}
}
}
}
1)
class 클래스이름 extends Thread{
public void run(){
공평하게 실행시킬 문장들
}
}
// run method 를 재정의 해야 한다. API 에 그렇게 나옴
클래스이름 변수1 = new 클래스이름();
클래스이름 변수2 = new 클래스이름();
** 두개의 객체변수 변수1과 변수2가 공평하게 일을 시키도록 하기 위해서는 Thread를 가동한다.
즉, Thread를 가동시키기 위한 메소드는 start()
변수1.
변수1.run();
변수2.run();
// 위와 같이 하면 일반 메소드처럼 동작한다.
변수1.start();
변수2.start();
// 가능하면 두 개의 객체가 공평하게 실행이 되게끔 스케쥴링 됨 (꼭 1:1 번갈아가며 실행되는게 아님)
2)
class PrimeThread extends Thread {
long minPrime;
PrimeThread(long minPrime) {
this.minPrime = minPrime;
}
public void run() {
// compute primes larger than minPrime
. . .
}
}
class PersonTest01{
public static void main(String[] args) {
Person p1 = new Person("홍길동");
Person p2 = new Person("강감찬");
p1.start();
p2.start();
}
}
/*
Thread.sleep 의 형태(API)
public static void sleep(long millis,
int nanos)
throws InterruptedException
*/
3)
class 클래스이름 [extends 부모클래스] implements Runnable{
public void run(){
공평하게 실행시키고자 하는 문장
}
}
클래스이름 변수1 = new 클래스이름();
클래스이름 변수2 = new 클래스이름();
// Runnable 인터페이스를 구현한 객체가 바로 start를 호출 할 수 없다. Thread를 통해서 가능하다.(API)
/*
Thread t1 = new Thread(변수);
Thread t2 = new Thread(변수);
t1.start();
t2.start();
*/
// 위에 4줄을 밑에처럼 바꿀 수도 있다.
(new Thread(변수1)).start();
(new Thread(변수2)).start();
4. 위의 예제를 Runnable 인터페이스를 이용한 것으로 수정하기
//위의 예제를 Runnable 인터페이스를 이용한 것으로 수정합니다.
class Person implements Runnable{
private String name;
public Person(String name){
this.name = name;
}
public void run(){
for (int i = 1; i <= 10 ; i++ ){
System.out.println("Hello, " + name);
// 딜레이되는 시간 일부러 주려고 함
try{
Thread.sleep(200);
} catch(Exception e){
}
}
}
}
class PersonTest02{
public static void main(String[] args) {
//(new Thread("홍길동")).start();
//(new Thread("강감찬")).start();
Person p1 = new Person("홍길동");
Person p2 = new Person("강감찬");
(new Thread(p1)).start();
(new Thread(p2)).start();
}
}
'JAVA > JAVA' 카테고리의 다른 글
자바 예제 - join() 메소드 (0) | 2016.06.12 |
---|---|
자바 예제 - Thread 를 이용한 우선순위 설정 (0) | 2016.06.12 |
자바 개념 - 멀티 쓰레드(Thread) 프로그래밍 설명 및 간단한 예제 (0) | 2016.06.12 |
자바 개념 - 예외처리 (0) | 2016.06.12 |
자바 예제 - inner 클래스 만들어지는 과정 (0) | 2016.06.12 |