Java-使用执行程序服务的线程

问题描述 投票:0回答:2

我正在用Java学习执行器服务。要求正在使用executor服务创建4个线程-

线程1-获得两个数字作为输入。

线程2-两个数字相加

线程3-两个数字相乘

线程4-打印结果。

应该先执行线程1,在线程1完成后,线程2、3可以同时开始处理,最后在线程2、3完成后才开始执行。线程4应该最终运行。

我们如何确定哪个线程首先启动,然后哪个线程同时启动。最后,最后执行哪个线程。

注意:如果不使用线程睡眠,我们如何实现这一目标。一旦线程1完成,就会动态地动态启动另外两个线程。

java multithreading java-8 executorservice scheduledexecutorservice
2个回答
0
投票

您可以使用多种方法执行此操作。

例如,加入

一个线程可以加入另一个线程,这意味着它要等到另一个线程完成。线程2和3可以加入线程1,线程4可以加入线程2和3。

另一种可能性是await and signal,但我不确定它是否满足您的要求(它使用类似于Thread.sleep()的方法:

首先,创建通用的java.util.concurrent.locks.Lock并使用.newCondition()创建此锁定的条件。还使用newCondition()创建第二个条件。

在调用awaitsignal / signalAll之前,必须锁定该锁。

在启动之前,线程2和3在第一个条件下调用.await(),完成时线程1在第一个条件下调用.signalAll

线程4在启动之前在第二种情况下调用.await()

最后完成的线程(2或3)(在第二个条件下调用.signal()。最后完成的线程(该线程首先完成的逻辑应该与锁同步)。]

线程也可以彼此启动

线程1在任务完成后启动线程2和3,但我建议您使用线程4的其他机制之一。

[免责声明

]

如果使用ExecutorService,您可能无法直接与线程进行交互。 This post可能会帮助您进行连接,等待/信号应该不会更困难,并且如果需要,线程也可以将任务计划到线程池中。


0
投票

首先,请阅读我对您的原始问题的评论-有关使用汽车锤击钉子的问题。

© www.soinside.com 2019 - 2024. All rights reserved.