- 하나의 객체를 여러 개의 Thread가 사용한다는 것을 의미한다
ex)
공유객체 > 그네
쓰레드 > 아이(사용자)
- 공통으로 사용할 것을 클래스와 인스턴스로 만든다
- 위 인스턴스와 클래스를 각각의 쓰레드에서 사용한다
코드예시)
공유객체 MusicBox
public class MusicBox {
//신나는 음악!!! 메시지가 1초이하로 쉬면서 10번 출력
public void playMusicA(){
for(int i = 0; i < 10; i ++){
System.out.println("신나는 음악!!!");
try {
Thread.sleep((int)(Math.random() * 1000)); //대기시간을 지정. 이클립스가 알아서 예외처리를 해준다
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} //playMusicA
//슬픈 음악!!!이란 메시지가 1초이하로 쉬면서 10번 반복출력
public void playMusicB(){
for(int i = 0; i < 10; i ++){
System.out.println("슬픈 음악!!!");
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} //playMusicB
//카페 음악!!! 이란 메시지가 1초이하로 쉬면서 10번 반복출력
public void playMusicC(){
for(int i = 0; i < 10; i ++){
System.out.println("카페 음악!!!");
try {
Thread.sleep((int)(Math.random() * 1000));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
} //playMusicC
}
Thread객체 MusicPlayer
- Thread를 상속하고 있기 때문에 run() 메소드를 구현
public class MusicPlayer extends Thread{
int type;
MusicBox musicBox;
// 생성자로 부터 musicBox와 정수를 하나 받아들여서 필드를 초기화
public MusicPlayer(int type, MusicBox musicBox){
this.type = type;
this.musicBox = musicBox;
}
// type이 무엇이냐에 따라서 musicBox가 가지고 있는 메소드가 다르게 호출
//Thread를 상속하면 run 메소드를 구현해야한다
public void run(){
switch(type){
case 1 : musicBox.playMusicA(); break;
case 2 : musicBox.playMusicB(); break;
case 3 : musicBox.playMusicC(); break;
}
}
}
MusicBoxExam1 클래스
- Thread의 병행처리를 위해 start() 메소드 구현
public class MusicBoxExam1 {
public static void main(String[] args) {
// MusicBox 인스턴스
MusicBox box = new MusicBox();
MusicPlayer kim = new MusicPlayer(1, box);
MusicPlayer lee = new MusicPlayer(2, box);
MusicPlayer kang = new MusicPlayer(3, box);
// MusicPlayer쓰레드 실행
// start() 메소드를 통해 쓰레드의 병행처리 구현(순서대로 출력X)
kim.start();
lee.start();
kang.start();
}
}
* 위 게시물은 프로그래머스<자바중급> 강의를 복습하며 정리한 글입니다*
'JAVA' 카테고리의 다른 글
JAVA(2022.06.04) - 쓰레드와 상태제어 (0) | 2022.06.04 |
---|---|
JAVA(2022.06.03) - 메소드 동기화 (0) | 2022.06.03 |
JAVA(2022.06.01) - Inner nested class (0) | 2022.06.01 |
JAVA(2022.05.31) - Thread (0) | 2022.05.31 |
JAVA(2022.05.30) - Annotation(어노테이션) (0) | 2022.05.30 |