본문 바로가기

JAVA/JAVA

자바 예제 - 멀티쓰레드 프로그래밍 방법

반응형


** 멀티쓰레드 프로그래밍 방법


<순서>

** 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();

}

}

반응형