![](/img/trans.png)
[英]Converting number to words in Java. Is there an easier and more efficient way to do it?
[英]Java. Is there an easy way to sequentialize a multithreaded app to make debugging easier?
我有一个spring-mvc应用程序,该应用程序具有执行不同功能的许多不同线程。 如果可以使程序(和日志)更具确定性,我将非常高兴。 (所有内容始终以相同的顺序执行)。
也许有一种简单的方法可以做到这一点。
或者至少,您有一个建议如何调试这种多线程应用程序???
对于日志记录,您可以包括线程ID,然后进行筛选以一次仅查看一个线程。
线程上下文切换取决于OS调度程序,此外,它还取决于其他正在运行的进程。 确保线程以特定顺序运行的唯一方法是使用并发信令机制,除非您有充分的理由,否则不应该这样做。 您应用的重要结果应该是确定性的(否则,这是竞争条件)。 但是交织线程执行的顺序应该有所不同。
Dane的想法很有趣,但是我建议不要将其作为调试多线程代码的一种方式。
为什么?
因为日志记录可能会更改您尝试调试的代码的属性。
使用常规调试器也是如此。
实际上,没有一种调试多线程代码的简便方法。
我的建议是:
尝试使用Java SE库中的高级并发构造来实现代码。
请特别注意确保正确同步多个线程共享的对象和数据结构。
当您遇到问题时,请尝试通过对问题进行推理来找出正在发生的情况。
尝试找到可以提供帮助的静态代码分析器。
您可以在java.util.concurrent包中使用ExecutorService。 这是在多线程应用程序中处理线程的简便得多的方法。
如果只想运行一个线程。 Executors.newSingleThreadExecutor();
您可以从这里参考示例https://www.tutorialspoint.com/java_concurrency/concurrency_newsinglethreadexecutor.htm
以后,如果要使用多个线程运行同一程序。 使用ExecutorService executor = Executors.newFixedThreadPool(int nThreads); 它创建一个线程池,该线程池重用在共享的无边界队列上运行的固定数量的线程。
例如: https : //www.tutorialspoint.com/java_concurrency/concurrency_newfixedthreadpool.htm
有关更多说明,请参阅此。 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.