【发布时间】:2016-05-02 23:32:36
【问题描述】:
我正在尝试编写一个使用多个线程来创建计时器的简短 Java 程序。当计时器达到 7 或 15 秒时,它将打印一条消息。
我需要创建一个共享计数器。时间打印线程将计数器加一并从执行开始每秒打印其值。一个消息打印线程每 15 秒打印一个消息,另一个消息打印线程每 7 秒打印一个不同的消息。这两个线程需要在不修改时间打印线程的情况下完成。
所有这些线程都需要共享每秒更新的计数器对象。每次更新时,时间打印线程都会通知其他线程读取计数器对象。然后,每个消息打印线程将读取计数器值并查看其分配的时间段是否已经发生。
输出应如下所示:
1 2 3 4 5 6
7 second message
7 8 9 10 11 12 13
7 second message
14
15 second message
15 16 17 18 19 20
7 second message
21 22 23 24 . . .
我需要为计时器创建一个线程,为 7 秒消息创建一个线程,为 15 秒消息创建一个线程。我在下面构建了这个:
import java.lang.Class;
import java.lang.Object;
class T1 extends Thread {
private Main2 s;
private int t;
T1 (Main2 s) { this.s = s; }
public void run()
{
while(true) {
try { Thread.sleep(1000); }
catch (InterruptedException e) { e.printStackTrace(); }
s.setSharedTime (++t);
System.out.print(t + " ");
}
}
}
class T2 extends Thread {
private Main2 s;
T2 (Main2 s) { this.s = s; }
public void run()
{
while(true) {
int t = s.getSharedTime ();
System.out.println();
System.out.println ("7 second message");
}
}
}
class T3 extends Thread {
private Main2 s;
T3 (Main2 s) { this.s = s; }
public void run()
{
while(true) {
int t = s.getSharedTime ();
System.out.println();
System.out.println ("15 second message");
}
}
}
public class Main2 {
private int time;
private boolean share = true;
public static void main(String[] args) {
Main2 s = new Main2();
new T1 (s).start();
new T2 (s).start();
new T3 (s).start();
}
synchronized void setSharedTime (int s) {
while (!share) {
try { wait (); }
catch (InterruptedException e) {}
}
this.time = s;
if(s % 7 == 0)
share = false;
if(s % 15 == 0)
share = false;
notify ();
}
synchronized int getSharedTime () {
while (share) {
try { wait (); }
catch (InterruptedException e) { }
}
share = true;
notify ();
return time;
}
}
我遇到的问题是我无法在正确的时间抛出 7 秒和 15 秒的消息。如何同时运行这三个线程来组合一个工作计时器?
【问题讨论】:
-
您想如何将它们组合在一起?我认为线程一起工作的目的尚不清楚。您是否只想要两个完全独立且完全不相互依赖的线程?
-
是的,我会编辑问题以尝试清楚。
标签: java multithreading timer