Java并发性问题线程与执行器服务

时间:2012-12-22 10:37:22

标签: java multithreading concurrency executorservice

我整天都在乱网。没有真正的答案。我希望有人可以给我一些建议。

我正在尝试构建的是一个汽车买家类型的应用程序,需要轮询拍卖并检查我想购买的商品是否可用。

所以在概念上我认为我应该能够启动一直运行的线程(直到我告诉它停止)

当它找到一个项目时,它应该启动另一个出价或购买该项目的线程。

我所有的代码都完成了,它使机械师只是我遇到的线程。

第一个问题是我能够使用thread / runnable并使用执行服务来启动线程

但是在所有情况下我都不知道如何让线程继续处理.....然后允许我发出某种命令,当我想要停止程序时它将停止线程...

非常感谢一些指导

1 个答案:

答案 0 :(得分:1)

据我所知,你有下一个想法:

  1. 为了找到讨价还价而不时有一些服务的线程
  2. 如果找到,那么应该为这个具体项目生成另一个帖子,用于进行竞标,购买和惹恼其他没有这么好工具的其他买家。
  3. 如果您不想再购买商品,请停止特定帖子。
  4. 所有这些都可以使用JVM线程原语由您自己的线程框架实现(这样做会很有趣!)。不过我建议使用Spring FrameworkTask Execution and Scheduling详细解释了如何做到这一点。实质上:

    • 想要定期执行某些方法吗?只需将@Scheduled放在上面! (地址#1)
    • 想要以异步方式执行某些方法吗?把@Async!(地址#1)
    • 关于#3 - 取消/停止线程本身就是问题。看看this问题/答案。到目前为止,我发现的最佳(和推荐)方法是在内存中使用共享变量或在数据库中使用某些值(如果应用程序在分布式环境中运行)作为要求后台线程停止的标志。

    听起来很简单,你仍然需要了解引擎盖下发生了什么,并了解一下弹簧。此外,@Sheculed / @Async任务在两个不同的线程池中执行,您可能希望更新它们的默认大小值 - 我只在生产部署后才学到: - )