在最近的一次采访中,我被问到一个特定的流程/程序,该流程/程序在java中用于实现多线程以及调试多线程问题。虽然我知道如何编写好的多线程代码的一些好的做法,但我不知道用于在java中编写多线程/并发程序的任何特定进程。
我做了一些搜索并阅读了一些博客以及关于这个主题的书籍,但我遇到的最接近的这种范例是Amdahl定律,但那是多线程的性能方面。是否有任何此类特定进程/算法/规则集用于在java中编写多线程应用程序
答案 0 :(得分:0)
你表达这个问题的方式很模糊。在" java中用于实现多线程的技术,"它们可能意味着同步原语。 Java使用synchronize
,wait
和notify
提供监视器。它将线程代码体实现为Runnable
。其他语言和库使用不同的方法。
为了实现,Java库支持多线程设计模式。生成器 - 消费者模式由同步队列支持。还有线程池。有一些互斥锁和锁可供线程独占访问代码和数据。等等。
JVM旨在通过为调试器提供内置API来支持调试。
当然,调试多线程代码就像一个矛盾的东西。错误是非确定性的,所以仅仅运行没有错误并不意味着它们已经消失。
因此,编写多线程代码的首要任务是必须提前证明它是正确的,通常是通过建立不变量并使用提供的工具(如同步原语)来强制执行它们。添加断言来验证不变量是一种验证证据的方法,虽然很少保证它是正确的。
答案 1 :(得分:0)
以下是创建安全的多线程Java代码的一般概念:
synchronize
只允许一个线程访问它