多线程Java应用程序中进程间通信的最佳方法是什么。
它应该是高性能的(所以没有JMS)易于实现和可靠,所以 对象&数据只能绑定到一个线程?
欢迎任何想法!
答案 0 :(得分:15)
如果是第一个,那么 java.util.concurrent 之类的内容可能就像ConcurrentLinkedQueue一样。 (我通过java.util.concurrent中的类在我的线程中传递消息并成功。)
如果是后者,那么我会猜测并建议看一下 RMI ,虽然我认为它没有资格完全可靠 - 你有管理那些更多的'动手'就像。
答案 1 :(得分:9)
假设场景1 JVM,那么多个线程确实是java.util.concurrent,尤其是各种Queue实现。然而,除此之外的抽象可能很好,并且Jetlang看起来非常有趣,轻量级的Java消息传递。
答案 2 :(得分:4)
我建议查看整个java.util.concurrent包,它有多个类来处理并发和线程之间的不同通信方式。一切都取决于你想要达到的目标,因为你的问题非常普遍。
答案 3 :(得分:3)
您应该使用生产者/消费者队列。通过这样做,您可以避免多线程编程的陷阱:竞争条件和死锁。此外,它不仅更简单,更清洁,而且如果您使用像Disruptor或MentaQueue这样的无锁队列,速度也会快得多。我写了一篇博客文章,详细讨论了这个问题,并展示了如何获得< 100纳秒延迟:Inter-thread communication with 2-digit nanosecond latency。
答案 4 :(得分:3)
我刚刚在github(http://github.com/caplogic/mappedbus)上添加了MappedBus,这是一个高效的IPC库,它允许多个Java进程/ JVM通过交换消息进行通信,并使用内存映射文件进行传输。吞吐量已达到4000万条消息/秒。