用java编写多线程代码的公认过程/过程
在最近的一次采访中,我被要求说出一个在java中用于实现多线程和调试多线程问题的特定进程/过程。虽然我知道一些关于如何编写好的多线程代码的好实践,但我不知道有任何特定的过程用于在java中编写多线程/并发程序用java编写多线程代码的公认过程/过程,java,multithreading,Java,Multithreading,在最近的一次采访中,我被要求说出一个在java中用于实现多线程和调试多线程问题的特定进程/过程。虽然我知道一些关于如何编写好的多线程代码的好实践,但我不知道有任何特定的过程用于在java中编写多线程/并发程序 我做了一些搜索,读了一些博客以及关于这个主题的书籍,但我遇到的最接近这种范例是阿姆达尔定律,但那是关于多线程性能方面的。是否有任何这样的特定流程/算法/规则集用于在java中编写多线程应用程序您对这个问题的措辞非常模糊。在“java中用于实现多线程的技术”下,它们可能意味着同步原语。Jav
我做了一些搜索,读了一些博客以及关于这个主题的书籍,但我遇到的最接近这种范例是阿姆达尔定律,但那是关于多线程性能方面的。是否有任何这样的特定流程/算法/规则集用于在java中编写多线程应用程序您对这个问题的措辞非常模糊。在“java中用于实现多线程的技术”下,它们可能意味着同步原语。Java为监视器提供了
同步
、等待
和通知
。它将线程代码体实现为Runnable
s。其他语言和库使用不同的方法
对于实现,Java库支持多线程设计模式。同步队列支持生产者-消费者模式。还有线程池。有互斥锁和锁,线程可以独占访问代码和数据。等等
JVM旨在通过为调试器提供内置API来支持调试
当然,调试多线程代码有点像矛盾修饰法。bug是不确定的,所以仅仅在没有bug的情况下运行并不意味着它们就消失了
因此,编写多线程代码的首要智慧在于,您必须事先证明它是正确的,通常是通过建立不变量并使用提供的工具(如同步原语)来实施它们。添加断言以验证不变量是验证证明的一种方法,但很少能保证证明是正确的。以下是创建安全的多线程Java代码的一些一般思路:
- 线程限制-对可变数据类型的修改应限制在单个线程中,以防止争用情况
- 使用线程安全数据类型-例如,线程安全阻止队列将安全地允许多个线程访问和修改其内容
- 不可变数据类型-使用无法修改的数据类型可以在线程之间安全地共享它们
- 同步-对方法或对象使用
,只允许单个线程访问它同步