出力の一時停止と再開
Posted feedbacks - Java
Javaでは、STDINがバッファされてしまうため Enterが押下されるまで読み込めません。 そのため、下記のコードでは p + Enterと、q + EnterでSuspendとQuitします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | public class Sample179 implements Runnable {
private final Object lockObj_ = new Object();
private boolean isSuspend_ = false;
public boolean getSuspend() {
synchronized (lockObj_) {
return isSuspend_;
}
}
public void changeSusupend() {
synchronized (lockObj_) {
isSuspend_ = !isSuspend_;
if (isSuspend_) {
lockObj_.notifyAll();
}
}
}
@Override
public void run() {
try {
while (Thread.currentThread().isAlive()) {
synchronized (lockObj_) {
while (getSuspend()) {
lockObj_.wait(1000);
}
}
System.out.print('a');
Thread.sleep(1000);
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
public static void main(String[] args) {
final Sample179 sample = new Sample179();
Thread thread = new Thread(sample);
thread.setDaemon(true);
thread.start();
try {
while (true) {
char c = (char) System.in.read();
if (c == 'q') break;
if (c == 'p') {
sample.changeSusupend();
}
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
|


nobsun
#6346()
Rating3/3=1.00
起動すると、標準出力に1秒毎に'a'の1文字を出力し続けるプログラムで、 以下の条件を満たすものを「どう書く?」
[ reply ]