在最近的一次采访中,我被要求说出一个在java中用来实现多线程和调试多线程问题的特定进程/过程。虽然我知道一些关于如何编写好的多线程代码的良好实践,但我不知道在java中用于编写多线程/并发程序的任何特定过程。
我做了一些搜索,阅读了一些关于这个主题的博客和书籍,但我遇到的最接近的范例是Amdahl定律,但那是关于多线程的性能方面的。是否有这样的特定进程/算法/规则集用于在java中编写多线程应用程序
发布于 2014-05-12 09:30:39
你提出这个问题的方式相当模棱两可。在“java中使用的实现多线程的技术”一文中,它们可能指的是同步原语。Java为监视器提供了synchronize
、wait
和notify
。它将线程代码体实现为Runnable
,其他语言和库使用不同的方法。
对于实现,Java库支持多线程设计模式。同步队列支持生产者-消费者模式。还有线程池。线程对代码和数据的独占访问有互斥锁和互斥锁。等。
JVM旨在通过为调试器提供内置API来支持调试。
当然,调试多线程代码有点像矛盾修饰法。Bugs是不确定的,所以仅仅运行没有bug并不意味着它们消失了。
因此,编写多线程代码的最重要的智慧是,您必须提前证明它是正确的,通常是通过建立不变量并使用提供的工具(如同步原语)来强制执行它们。添加断言来验证不变量是验证证明的一种方式,尽管很少能保证证明是正确的。
发布于 2014-05-12 10:29:41
下面是一些创建安全、多线程Java代码的一般想法:
synchronize
之间安全地共享-对方法或对象使用synchronize
只允许单个线程访问它https://stackoverflow.com/questions/23599477
复制相似问题