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 - Fatal编程技术网

用java编写多线程代码的公认过程/过程

用java编写多线程代码的公认过程/过程,java,multithreading,Java,Multithreading,在最近的一次采访中,我被要求说出一个在java中用于实现多线程和调试多线程问题的特定进程/过程。虽然我知道一些关于如何编写好的多线程代码的好实践,但我不知道有任何特定的过程用于在java中编写多线程/并发程序 我做了一些搜索,读了一些博客以及关于这个主题的书籍,但我遇到的最接近这种范例是阿姆达尔定律,但那是关于多线程性能方面的。是否有任何这样的特定流程/算法/规则集用于在java中编写多线程应用程序您对这个问题的措辞非常模糊。在“java中用于实现多线程的技术”下,它们可能意味着同步原语。Jav

在最近的一次采访中,我被要求说出一个在java中用于实现多线程和调试多线程问题的特定进程/过程。虽然我知道一些关于如何编写好的多线程代码的好实践,但我不知道有任何特定的过程用于在java中编写多线程/并发程序


我做了一些搜索,读了一些博客以及关于这个主题的书籍,但我遇到的最接近这种范例是阿姆达尔定律,但那是关于多线程性能方面的。是否有任何这样的特定流程/算法/规则集用于在java中编写多线程应用程序

您对这个问题的措辞非常模糊。在“java中用于实现多线程的技术”下,它们可能意味着同步原语。Java为监视器提供了
同步
等待
通知
。它将线程代码体实现为
Runnable
s。其他语言和库使用不同的方法

对于实现,Java库支持多线程设计模式。同步队列支持生产者-消费者模式。还有线程池。有互斥锁和锁,线程可以独占访问代码和数据。等等

JVM旨在通过为调试器提供内置API来支持调试

当然,调试多线程代码有点像矛盾修饰法。bug是不确定的,所以仅仅在没有bug的情况下运行并不意味着它们就消失了


因此,编写多线程代码的首要智慧在于,您必须事先证明它是正确的,通常是通过建立不变量并使用提供的工具(如同步原语)来实施它们。添加断言以验证不变量是验证证明的一种方法,但很少能保证证明是正确的。

以下是创建安全的多线程Java代码的一些一般思路:

  • 线程限制-对可变数据类型的修改应限制在单个线程中,以防止争用情况
  • 使用线程安全数据类型-例如,线程安全阻止队列将安全地允许多个线程访问和修改其内容
  • 不可变数据类型-使用无法修改的数据类型可以在线程之间安全地共享它们
  • 同步-对方法或对象使用
    同步
    ,只允许单个线程访问它

我已经改写了我的声明。我对这些问题的大部分回答都是你在前三段中解释的,但面试官明确提到他在寻找一个能体现这些步骤的名字