gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 19:30:05 26 4
gpt4 key购买 nike

我正在学习java中的执行器服务。要求是使用执行器服务创建 4 个线程 -

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

线程 2 - 两个数字相加

线程 3 - 两个数字相乘

线程 4 - 打印结果。

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

我们如何确定哪个线程先启动以及接下来同时启动哪些线程。最后执行的是哪个线程。

注意:如何在不使用线程 sleep 的情况下实现这一目标。一旦线程 1 完成,其他两个线程就会动态地自动启动。

最佳答案

首先,请阅读我对您最初的问题的评论 - 关于使用汽车钉钉子的问题。

好的,现在,@dan1st 对于如何构建解决方案有了一些想法。还有两个。

  1. 使用全局int变量、全局以及wait()notifyAll():让每个线程进入一个 synchronized(lock) block ,在该 block 中

    • 循环,调用lock.wait()直到全局int具有某个特定值,
    • 它的伎俩,
    • 将全局 int 设置为将触发下一个线程的值,
    • 调用lock.notify(),最后
    • 退出
  2. 使用Semaphore:将两个Semaphore实例传递给每个线程。称它们为inout 或类似的名称。拥有每个线程

    • 通过调用in.acquire()等待轮到,
    • 发挥它的作用,
    • 调用out.release()
    • 然后退出。

然后,您的主例程负责创建信号量,并将它们传递给新线程,以便每个线程的 out 引用与 in 相同的信号量> 预计执行后续任务的线程。

<小时/>

IMO,选项 2 更优雅,因为如果您的老师要求您下周通过在序列中间添加另一个步骤来修改您的程序,那么您编写的现有任务都不会必须彻底改变。您只需要编写新任务并更改 main() 例程中的两到三行。

听起来并没有太大的改进,而且选项 2 显然比选项 1 需要更多的工作,但是如果您曾经受雇于具有数百万行代码的企业级软件系统,代码,您将开始欣赏选项 2 的美妙之处。

关于Java - 使用执行器服务的线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60028573/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com