전통 스 레 드 통신-스 레 드 실행 과정 에서 조건 전환-학습 노트 10

전통 적 인 스 레 드 통신 수행 과정 에서 의 통신 은 Object 류 의 wait(),notify(),notify All()방법 을 통 해 이 루어 집 니 다.다음은 하나의 사례 를 통 해 이러한 방법 을 배 워 보 겠 습 니 다.
 
사례:
       현재 두 개의 스 레 드 가 존재 한다 고 가정 하면 메 인 스 레 드 main 과 한 개의 스 레 드 는 먼저 하위 스 레 드 를 5 번 실행 한 다음 에 메 인 스 레 드 로 전환 하여 10 번 실행 한 다음 에 하위 스 레 드 로 전환 하여 5 번 실행 하고 메 인 스 레 드 는 10 번 실행 합 니 다.이렇게 각각 3 번 순환 합 니 다.
 
프로그램 코드 는 다음 과 같 습 니 다:
/**
 * 
 * @author    
 * @date May 24, 2014 5:08:12 PM
 */
public class ConditionTest {

	public static void main(String[] args) {

		final Business2 b = new Business2();

		//     1   20 
		new Thread(new Runnable() {
			public void run() {
				for (int i = 0; i < 3; i++) {
					b.sub1(i);
				}
			}
		}).start();

		for (int i = 0; i < 3; i++) {
			b.main2(i);
		}
	}

}

class Business2 {

	private boolean action = true;

	public synchronized void sub1(int once) {
		while (!action) {//
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int i = 0; i < 5; i++) {
			System.out.println("Sub1 " + once + " runing *********" + i);
		}
		action = false;
		this.notify();
	}

	public synchronized void main2(int once) {
		while (action) {//
			try {
				this.wait();
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}

		for (int i = 0; i < 10; i++) {
			System.out.println("Main2 " + once + " runing *********" + i);
		}
		action = true;
		this.notify();
	}
}

 
출력 결과:
Sub1 0 runing *********0
Sub1 0 runing *********1
Sub1 0 runing *********2
Sub1 0 runing *********3
Sub1 0 runing *********4
Main2 0 runing *********0
Main2 0 runing *********1
Main2 0 runing *********2
Main2 0 runing *********3
Main2 0 runing *********4
Main2 0 runing *********5
Main2 0 runing *********6
Main2 0 runing *********7
Main2 0 runing *********8
Main2 0 runing *********9
Sub1 1 runing *********0
Sub1 1 runing *********1
Sub1 1 runing *********2
Sub1 1 runing *********3
Sub1 1 runing *********4
Main2 1 runing *********0
Main2 1 runing *********1
Main2 1 runing *********2
Main2 1 runing *********3
Main2 1 runing *********4
Main2 1 runing *********5
Main2 1 runing *********6
Main2 1 runing *********7
Main2 1 runing *********8
Main2 1 runing *********9
Sub1 2 runing *********0
Sub1 2 runing *********1
Sub1 2 runing *********2
Sub1 2 runing *********3
Sub1 2 runing *********4
Main2 2 runing *********0
Main2 2 runing *********1
Main2 2 runing *********2
Main2 2 runing *********3
Main2 2 runing *********4
Main2 2 runing *********5
Main2 2 runing *********6
Main2 2 runing *********7
Main2 2 runing *********8
Main2 2 runing *********9

 
 
 

좋은 웹페이지 즐겨찾기