728x90
반응형
멀티 쓰레드를 이용한 카운터
* 요구사항
|
* 소스 코드
public class waitNotifyExample {
public static void main(String[] args) {
System.out.print("Enter Max Value : ");
WorkObject sharedObject = new WorkObject(); // 공유 객체를 생성
ThreadA threadA = new ThreadA(sharedObject); //threadA 객체를 생성
ThreadB threadB = new ThreadB(sharedObject); //threadB 객체를 생성
threadA.start(); //threadA 시작
threadB.start(); //threadB 시작
//쓰레드 종료 대기
try {
threadA.join();
System.out.println("End Thread A");
threadB.join();
System.out.println("End Thread B");
} catch (Exception e) {
//System.out.println("Interrupted!!");
}
System.out.println("결과 : " +(sharedObject.count));
}
}
메인 클래스
import java.util.Scanner;
public class WorkObject {
static Scanner scanner = new Scanner(System.in); // 값을 입력 받음
static int Max=scanner.nextInt();
static int count=Max;//카운트 변수 초기값은 Max(입력 받은 값)
public synchronized void methodA() { //동기화된 메소드 a
WorkObject.count--; //카운트 변수 1씩 감소
System.out.println("ThreadA 동작 : " + count );
notify(); //대기상태
try {
wait(); //일시정지
} catch (InterruptedException e) {
}
notifyAll();
}
public synchronized void methodB() { //동기화된 메소드 b
WorkObject.count--;//카운트 변수 1씩 감소
System.out.println("ThreadB 동작 : "+ count);
notify(); //대기 상태
try {
wait(); //일시정지
} catch (InterruptedException e) {
}
notifyAll();
}
}
Thread 횟수 입력
public class ThreadA extends Thread {
private WorkObject workObject;
public ThreadA(WorkObject workObject) {
this.workObject = workObject;
}
@Override
public void run() { //출력 되는 부분
while(true) {
if(workObject.count!=0)//입력한 값이 0이 아니면
workObject.methodA(); //메소드A 호출
else
break;//멈춘다
}
}
}
Thread A
public class ThreadB extends Thread{
private WorkObject workObject;
public ThreadB(WorkObject workObject ) {
this.workObject = workObject;
}
@Override
public void run() { // 출력 되는 부분
while(true) {
if(workObject.count!=0)//count값이 0이 아니면
workObject.methodB(); //메소드B 호출
else
break; //멈춘다
}
}
}
Thread B
* 프로그램 실행 화면
728x90
반응형
'Language > Java' 카테고리의 다른 글
[Java] 두수를 입력 받아 사칙연산 하기 (0) | 2019.07.09 |
---|
Comments