Java并发性问题线程与executorservice

Java并发性问题线程与executorservice,java,multithreading,concurrency,executorservice,Java,Multithreading,Concurrency,Executorservice,我一整天都在上网。没有真正的答案。我希望有人能给我一些建议 我正在尝试构建一个自动买家类型的应用程序,该应用程序需要轮询拍卖并检查我想要购买的物品是否可用 所以从概念上讲,我认为我应该能够启动一个一直运行的线程(直到我告诉它停止) 当它找到一个项目时,它应该启动另一个线程来出价或购买该项目 我已经完成了所有的代码,完成了机械操作,这只是我一直在使用的线程 第一个问题是,我已经能够使用thread/runnable和执行服务启动线程 但在所有情况下,我都不知道如何让线程继续处理。。。。。然后允许我

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

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

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

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

我已经完成了所有的代码,完成了机械操作,这只是我一直在使用的线程

第一个问题是,我已经能够使用thread/runnable和执行服务启动线程

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


非常感谢您提供一些指导

,因为我知道您接下来会想到:

  • 有一个线程,它会不时轮询一些服务,以便找到便宜货
  • 如果找到,那么应该为这个具体项目生成另一个线程,用于进行投标、购买和激怒其他没有这么好工具的买家
  • 如果您不想再购买物品,请停止特定线程
  • 所有这些都可以由您自己的线程框架使用JVM线程原语实现(这样做会很有趣!)。不过,我建议您使用。详细解释了如何做到这一点。实质上:

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

    听起来很简单,但你们仍然需要了解引擎盖下发生了什么,并了解一些关于春天的知识。另外,
    @Sheculed
    /
    @Async
    任务在两个不同的线程池中执行,您可能需要更新它们的默认大小值-仅在生产部署之后我学到的经验:-)

    只要您给线程一些事情做,它就会运行。如果你想周期性地做一些事情,你可以使用一个预定的任务,完成后你可以取消。嗨,彼得,是的,我想我明白了。目前,我正在运行一段时间(runningvar),直到我终止程序。我希望我可以在runnable类中使用一个变量,当我想停止运行的线程时,我只需将变量更新为false,这将导致线程结束。但是我不知道如何获取当前正在运行的线程的句柄,或者如何调用类中的方法来更新该变量。线程池或用于处理许多通常较短的任务。在长时间运行的循环中轮询不是一项应该以这种方式运行的任务。因此,这取决于应用程序的设计:您有几个快速任务要执行,还是希望在循环中运行更长时间的操作?感谢您的反馈,我也一直在考虑使用数据库表来控制进程是否应该运行。类似于一个注销按钮,它设置注销标志,然后停止所有子进程。。。。或者我一直在寻找和同步变量?但是还没有找到任何示例使用Spring来异步运行某些任务可能有点过头了。Java提供了一种非常简单易用的方法。