繁体   English   中英

在Java中编写多线程代码的公认过程/过程

[英]accepted process / procedure for writing multithreaded code in java

在最近的一次采访中,有人问我命名一个特定的过程/过程,该过程/过程在Java中用于实现多线程并调试多线程问题。 尽管我了解一些如何编写好的多线程代码的良好实践,但是我不知道用于用Java编写多线程/并行程序的任何特定过程。

我进行了一些搜索,并阅读了一些博客和有关该主题的书籍,但是我遇到的最接近这种范例的是阿姆达尔定律,但这涉及多线程的性能方面。 是否有任何此类特定的过程/算法/规则集可用于用Java编写多线程应用程序

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

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

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

当然,调试多线程代码就像是矛盾的事情。 错误是不确定的,因此仅运行没有错误并不意味着它们已经消失。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM