JMV12
JMV12

Reputation: 1035

Print timed thread

I'm working on the following assignment:

Consider a shared counter whose values are non-negative integers, initially zero. A time-printing thread increments the counter by one and prints its value each second from the start of execution. A message-printing thread prints a message every fifteen seconds. Have the message-printing thread be notified by the time-printing thread as each second passes by. Add another message-printing thread that prints a different message every seven seconds. Such addition must be done without modifying the time-printing thread implementation.

Have all involved threads share the counter object that is updated by the time-printing thread every second. The time-printing thread will notify other threads to read the counter object each time it updates the counter, then each message-printing thread will read the counter value and see if its assigned time period has elapsed; if so, it will print its message.

import java.lang.Class;
import java.lang.Object;

public class Main2 {

    public static void main(String... args)
    {
        Thread thread = new Thread()
        {
            public void run()
            {
                int x = 0;
                while(true)
                {
                    x = x + 1;
                    System.out.print(x + " ");
                    if(x%7 == 0)
                    {
                        System.out.println();
                        System.out.println("7 second message");
                    }
                    if(x%15 == 0)
                    {
                        System.out.println();
                        System.out.println("15 second message");
                    }
                    try { Thread.sleep(1000); }
                    catch (Exception e) { e.printStackTrace(); }
                }
            }
        };
        thread.start();
    }
}

This outputs what I want it to, but the requirement calls for multiple threads to output when the 7 and 15 second messages show. I can't wrap my head around how to use multiple threads to do this.

Upvotes: 2

Views: 1597

Answers (1)

Geeth Lochana
Geeth Lochana

Reputation: 164

You have to remove the ";" after if conditions.

  if(x%7 == 0);

and

 if(x%15 == 0);

Check the following code

public static void main(String... args) {
        Thread thread = new Thread() {
            public void run() {
                int x = 0;
                while (true) {
                    x = x + 1;
                    System.out.print(x + " ");
                    if (x % 7 == 0)
                    {
                        System.out.println();
                        System.out.println("7 second message");
                    }
                    if (x % 15 == 0)
                    {
                        System.out.println();
                        System.out.println("15 second message");
                    }
                    try {
                        Thread.sleep(1000);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        thread.start();
    }

My output for this as follows

1 2 3 4 5 6 7 
7 second message
8 9 10 11 12 13 14 
7 second message
15 
15 second message
16 17 18 19 20 21 
7 second message
22 23 24 25 26 27 ...

Upvotes: 2

Related Questions