我在我的程序中使用了一个包含很多静态方法的库。我想并行运行一些代码(多线程)来调用这些静态方法。这会导致问题,因为在线程之间只共享一个静态类实例。这会导致崩溃。是否可以为每个线程创建此库的实例?我无法更改库中的任何代码,因为它是封闭源代码。
我的主题中的run方法:
public void run(){
for (String formula : input) {
try {
Formula converted = (Formula) logic.createExpression(formula);
System.out.println(converted);
Formula cnf = ClassicalLogic.Utilities.conjunctiveForm(converted, true);
if (cnf.toString().equals("true")) {
convertedFormulae.add(ClassicalLogic.Utilities.conjunctiveForm(converted));
} else {
convertedFormulae.add(cnf);
}
} catch (ParseException e) {
e.printStackTrace();
}
}
converter.threadReady(convertedFormulae);
}
问题在于:
Formula cnf = ClassicalLogic.Utilities.conjunctiveForm(converted, true);
我实际要求的是如何为每个线程创建一个单独的ClassicalLogic.Utilties实例?
答案 0 :(得分:2)
您可以为每个线程使用不同的类加载器。这些方面的东西应该有所帮助。
在if choice in ["go back", "way I came"]:
方法中尝试这个(假设jar文件是classicallogic.jar:
T2.C = T3.C
然后而不是调用
run
或
URLClassLoader clsLoader =
URLClassLoader.newInstance(new URL[] {new URL("file:///<path_to_classicallogic.jar>")});
Class cls = clsLoader.loadClass("classicallogic.ClassicalLogic.Utilities");
Method cF1 = cls.getMethod("conjunctiveForm", Formula.class);
Method cF2 = cls.getMethod("conjunctiveForm", Formula.class, boolean.class);
你这样做
ClassicalLogic.Utilities.conjunctiveForm(converted, true)
或
ClassicalLogic.Utilities.conjunctiveForm(converted)