Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Java应用程序中精细控制多个线程?_Java_Multithreading_Sockets - Fatal编程技术网

如何在Java应用程序中精细控制多个线程?

如何在Java应用程序中精细控制多个线程?,java,multithreading,sockets,Java,Multithreading,Sockets,我正在编写一个Java应用程序,旨在实时获取和保存消息。除此之外,我的应用程序还应该关注一些非功能性需求,如沿袭控制、事务控制、安全性、日志记录、监控等 每个功能都定义为一个模块,并将在与我的硬件资源磁盘、内存、CPU和GPU一致的线程中进行控制。因此,每当我的应用程序发展时,我的线程控制也应该发展 为了解决这个问题,我正在创建一个全局ExecutorService来管理应用程序中的所有线程。其中一些线程是永久性的,并定义为守护进程。我的应用程序还控制多个源。每一个都代表了上述所有特征的集合,任

我正在编写一个Java应用程序,旨在实时获取和保存消息。除此之外,我的应用程序还应该关注一些非功能性需求,如沿袭控制、事务控制、安全性、日志记录、监控等

每个功能都定义为一个模块,并将在与我的硬件资源磁盘、内存、CPU和GPU一致的线程中进行控制。因此,每当我的应用程序发展时,我的线程控制也应该发展

为了解决这个问题,我正在创建一个全局ExecutorService来管理应用程序中的所有线程。其中一些线程是永久性的,并定义为守护进程。我的应用程序还控制多个源。每一个都代表了上述所有特征的集合,任意演化


哪种做法最适合这种风景?如何控制多个线程,其中一些线程是否作为守护进程被任意创建和删除,另一个线程是否定期嵌套到另一个线程执行?

通常,如果您不想管理线程的创建和处置,使用一个线程池,您可以使用ExecutorService ExecutorService=Executors.newFixedThreadPool10;创建一个线程池

但是,要小心过早的优化,即花费精力优化代码,以牺牲可读性/可维护性为代价,通常是在性能增益无关紧要的情况下。一般良好做法是:

编写干净、可读的代码。 运行代码,查看是否遇到性能问题 使用JProfiler或JVisualVM等工具评测代码,以确定性能问题 如果代码的方式存在重大问题,请重构代码。 请记住,一般来说,开发人员的时间比CPU时间更有价值。显然,这是有限制的,但通常情况下,保持代码干净可读是最好的选择


您还可以使用此过程调整参数,例如,在固定线程池中,可以微调各种阈值以提高性能。

谢谢,Solomon Slow。我的应用程序有多个源,每个源都需要多个线程来控制数据流。例如,它还需要监控和数据沿袭。问题是,我的应用程序将增长数千个源。当然,我会增加我的硬件内存、disck和CPU,但我至少需要改善我对线程的精细控制,以正确使用我的资源。一条规则是不要将大小完全不同的任务提交给同一个执行者。谢谢你,内森·休斯。我会考虑我的解决方案。再次感谢你!一般来说,线程池非常好,应用程序生命周期专用线程正常,持续创建/终止/销毁非常糟糕。