I write a java program that prints seconds, and every fifth second it displays a message. This is an example output:
0 1 2 3 4 hello 5 6 7 8 9 hello 10 11 12 13 14 hello 15 16 17 18 19 hello
How to remove printMsg boolean? Is there a better thread design that allows this?
Now, without printMsg, the program will print a few "hello" during the program for 1/10 seconds, remaining at 5, 10, 15, etc.
class Timer { private int count = 0; private int N; private String msg; private boolean printMsg = false; public Timer(String s, int N) { msg = s; this.N = N; } public synchronized void printMsg() throws InterruptedException{ while (count % N != 0 || !printMsg) wait(); System.out.print(msg + " "); printMsg = false; } public synchronized void printTime() { printMsg = true; System.out.print(count + " "); count ++; notifyAll(); } public static void main(String[] args) { Timer t = new Timer("hello", 5); new TimerThread(t).start(); new MsgThread(t).start(); } } class TimerThread extends Thread { private Timer t; public TimerThread(Timer s) {t = s;} public void run() { try { for(;;) { t.printTime(); sleep(100); } } catch (InterruptedException e) { return; } } } class MsgThread extends Thread { private Timer t; public MsgThread(Timer s) {t = s;} public void run() { try { for(;;) { t.printMsg(); } } catch (InterruptedException e) { return; } } }
java multithreading
Dzung nguyen
source share