打印定时线程

时间:2016-05-01 22:25:37

标签: java timer

我正在做以下任务:

  

考虑一个共享计数器,其值为非负整数,   最初为零。时间打印线程将计数器递增1   并从执行开始每秒打印其值。一个   消息打印线程每十五秒打印一条消息。有   消息打印线程由时间打印线程通知为   每一秒都经过。添加另一个打印的消息打印线程   每七秒发一次不同的消息。必须这样添加   无需修改时间打印线程实现。

     

让所有涉及的线程共享由更新的计数器对象   时间打印线程每秒。时间打印线程会   每次更新时通知其他线程读取计数器对象   计数器,然后每个消息打印线程将读取计数器   值并查看其指定的时间段是否已经过去;如果是的话,它会   打印它的消息。

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();
    }
}

这将输出我想要的内容,但是当7和15秒消息显示时,需求要求输出多个线程。我不能围绕如何使用多个线程来解决这个问题。

1 个答案:

答案 0 :(得分:2)

如果条件允许,您必须删除";"

  if(x%7 == 0);

 if(x%15 == 0);

检查以下代码

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();
    }

我的输出如下

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 ...