在java中编写多线程代码的接受过程/过程

时间:2014-05-12 00:37:57

标签: java multithreading

在最近的一次采访中,我被问到一个特定的流程/程序,该流程/程序在java中用于实现多线程以及调试多线程问题。虽然我知道如何编写好的多线程代码的一些好的做法,但我不知道用于在java中编写多线程/并发程序的任何特定进程。

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

2 个答案:

答案 0 :(得分:0)

你表达这个问题的方式很模糊。在" java中用于实现多线程的技术,"它们可能意味着同步原语。 Java使用synchronizewaitnotify提供监视器。它将线程代码体实现为Runnable。其他语言和库使用不同的方法。

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

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

当然,调试多线程代码就像一个矛盾的东西。错误是非确定性的,所以仅仅运行没有错误并不意味着它们已经消失。

因此,编写多线程代码的首要任务是必须提前证明它是正确的,通常是通过建立不变量并使用提供的工具(如同步原语)来强制执行它们。添加断言来验证不变量是一种验证证据的方法,虽然很少保证它是正确的。

答案 1 :(得分:0)

以下是创建安全的多线程Java代码的一般概念:

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