我正在使用具有静态同步方法的第三方库,我希望并行执行此方法而不修改其来源。
我该怎么办?
我应该使用设置新上下文类加载器的线程工厂创建执行程序服务吗?
谢谢
答案 0 :(得分:3)
静态同步方法意味着它已锁定在类上。只有一个线程可以抓住类上的锁。你甚至不能将这个类子类化,它不允许你覆盖静态方法。
我害怕,你什么都做不了。
答案 1 :(得分:2)
如果要并行执行该方法,则必须在不同的过程中执行该方法 - 即并行运行程序两次。
答案 2 :(得分:2)
理论上,理论上你可以在不同的类加载器中加载两次库。实践可能会更困难。
为了链接到不同类加载器中的副本的链接,您还需要在这些类加载器(或子类加载器)中多次加载代码。代码实例之间的通用通信应该通过加载到公共基类中的代码。将反射保持在绝对最小值。由不同的类加载器加载的类将是不兼容的,即使它们具有相同的名称,这通常表现为奇怪的ClassCastException
。例如,运行时对象和强制类型具有相同的名称。以下?你确定要这么做吗?
可能是该方法同步的原因。可能原因很糟糕。那里会有可变的静力学。由于您已经多次加载代码,因此会有多个这些可变静态的副本。如果它们只是缓存,可能不会太糟糕。但是,图书馆几乎肯定很糟糕。
注意:线程上下文类加载器与除了搞砸之外的任何事情都没什么关系。
答案 3 :(得分:1)
如果在两个不同的类加载器中加载类,则可以独立地在每个类加载器中运行方法。但是,我怀疑班级的作者有充分的理由制作方法static synchronized
我会检查这实际上并不是必需的。