我有多个线程需要等待对方来完成一个进程。由于需求,必须这样做。如果我显示代码并显示预期的输出,那么这将是有意义的。这是我的主类:单步执行多个线程
public static ThreadedJob job1, job2;
public static ArrayList<Thread> threads = new ArrayList<Thread>();
public static void main(String[] rags) throws InterruptedException{
job1 = new Job1("Thread1:");
job2 = new Job2("Thread2:");
job1.run();
job2.run();
threads.add(new Thread(job1));
threads.add(new Thread(job2));
if (job1.getCounter() > job2.getCounter()) {
threads.get(0).wait();
threads.get(1).notify();
}
if (job1.getCounter() < job2.getCounter()) {
threads.get(1).wait();
System.out.println(true);
threads.get(0).notify();
}
}
这里是螺纹作业类,(作业1和作业2类现在只是延长和调用super(名称),这是所有)
public class ThreadedJob implements Runnable{
protected String name;
protected int counter = 0;
public ThreadedJob(String name){
this.name = name;
}
@Override
public void run() {
System.out.println(name + " job 1 complete");
counter++;
System.out.println(name + " job 2 complete");
counter++;
System.out.println(name + " job 3 complete");
counter++;
}
public int getCounter(){ return counter; }
}
这里是预期输出:
Thread1: job 1 complete Thread2: job 1 complete Thread1: job 2 complete Thread2: job 2 complete Thread1: job 3 complete Thread2: job 3 complete
这里是从我的代码输出:
Thread1: job 1 complete Thread1: job 2 complete Thread1: job 3 complete Thread2: job 1 complete Thread2: job 2 complete Thread2: job 3 complete
问题:如何让线程暂停,允许放开,然后继续。非常多的是,我怎样才能让他们一步步地等待产生预期的产出。谢谢!
重要提示:这需要线程的X量的工作,我只是正与2同样的测试,线程与不同的逻辑大部分是在实际应用时运行,但不允许在工作同一时间。
我想你忘了开始你的线程 - 你直接运行runnables。线程没有做任何事情。无论如何,一旦你得到了排序,看看'CyclicBarrier'和'CountdownLatch'。 – RealSkeptic
@RealSkeptic我以为我做了......除了run()之外,我该怎么做? – Luke
啊。那么,你需要从非常基本的线程开始。使用'run'方法在当前线程**中运行runnable **,并且不启动线程。看看[Oracle教程](https://docs.oracle.com/javase/tutorial/essential/concurrency/runthread.html)。 – RealSkeptic