KarelThreadProgram1 (KarelOOP2)

Retired DISLab
Swpark (토론 | 기여) 사용자의 2020년 10월 20일 (화) 23:19 버전
(비교) ← 이전 판 | 현재 판 (비교) | 다음 판 → (비교)
이동: 둘러보기, 찾기
/*
 * Copyright 2020 Sangwon Park @ DISLab, HUFS
 * 
 * 스레드 프로그래밍 예제이다.
 * 세 개의 스레드를 만들어 실행시킨다.
 * 먼저 세 개의 캐럴을 만들고 각 스레드는 월드를 빙글빙글 돌아간다.
 * 이때 스레드를 Runnable 객체를 이용하여 실행한다.
 * 또한 Runnable 객체를 다양한 방법으로 만들어 본다.
 */
package cp.java.week11.thread;
 
import hufs.dislab.karel.IKarel;
import hufs.dislab.karel.IKarelProgram;
import hufs.dislab.karel.SimpleKarel;
 
@SuppressWarnings("serial")
public class KarelThreadProgram1 extends IKarelProgram {
	Thread[] thr = new Thread[3];
 
	@Override
	protected void onInit() {
		class KarelRunnable extends SimpleKarel {
 
			public void run() {
				while (true) {
					if (frontIsClear())
						move();
					else
						turnLeft();
				}
			}
		}
 
		IKarel karel = new KarelRunnable();
		addIKarel(karel, getWorldWidth(), getWorldHeight(), WEST, 0);
		thr[2] = new Thread(karel);
 
		Runnable r = new Runnable() {
			private IKarel karel = getIKarel();
 
			public void run() {
				while (true) {
					if (karel.frontIsClear())
						karel.move();
					else
						karel.turnLeft();
				}
			}
		};
		thr[0] = new Thread(r);
 
		thr[1] = new Thread(new Runnable() {
			IKarel karel = new SimpleKarel();
 
			{
				addIKarel(karel, 1, getWorldHeight(), SOUTH, 0);
			}
 
			public void run() {
				while (true) {
					if (karel.frontIsClear())
						karel.move();
					else
						karel.turnLeft();
				}
			}
		});
	}
 
	@Override
	protected void onStart() {
		thr[0].start();
		thr[1].start();
		thr[2].start();
	}
 
	public static void main(String[] args) {
		IKarelProgram.main(args, new SimpleKarel());
	}
}
개인 도구
이름공간
변수
행위
둘러보기
구성원
연구
연구실
기타
도구모음
인쇄/내보내기