Mon*_*ter 5 java multithreading process isolation
是否有任何可靠的方法来确保线程在Java中保持彼此隔离?我有一个半星期的问题,实现各种第三方源代码的线程由于静态变量和其他我无法控制的事情而不断发生冲突.
我知道单个系统可以按照自己的意愿运行我正在处理的项目的多个实例.但是当尝试将所有内容合并到一个线程化的单个可执行文件中时,总会出现错误和异常.
我几乎正在为我想要的这个程序的每个实例启动一个新进程,但我真的不想走这条路(它会消除我收集的大量实时数据,以及因为阻碍了我杀死目标进程的能力).
建议?谢谢!
djn*_*jna 11
如果你想要使用的库的作者没有设计他们的代码是线程安全的,那么除了防止你的两个线程同时调用它之外,你几乎不能轻易做到.
你可以用类加载器来汲取一些技巧,但这往往会导致一个全新的复杂世界.详细说明,如果使用不同的类加载器,可以将同一个类加载到同一个JVM中两次(或更多次) - 因此您可以有效地获得静态变量的独立副本.某些Java EE应用程序服务器利用了单独的类加载器.这反过来会导致在库本身开始进行反射和动态类加载时使用哪个类加载器和类路径的问题.除非您的需求非常好,否则我不会推荐这种方法.
根据喜好将是:
1).有一个单线程工作者来处理不安全的代码.尝试在你的多线程应用程序中尽可能多地完成工作,尽可能少地投入到Worker中.
2).如果工作人员是您处理的主要部分,那么您确实需要并行执行将工作人员分成多个单独的进程,使用一些IPC通信来共享工作.这感觉就像JMS排队解决方案可能很好地工作.
3).如果您负担不起IPC开销,请尝试找到库的线程安全替代方案,或者如果您对作者有影响力,请让他们修复代码.增加并行性真的不应该那么难.
| 归档时间: |
|
| 查看次数: |
3699 次 |
| 最近记录: |