KarelThreadProgram1 (KarelOOP2)
Retired DISLab
/* * 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()); } }