为每个线程创建静态库的实例

时间:2015-11-12 19:23:09

标签: java multithreading static

我在我的程序中使用了一个包含很多静态方法的库。我想并行运行一些代码(多线程)来调用这些静态方法。这会导致问题,因为在线程之间只共享一个静态类实例。这会导致崩溃。是否可以为每个线程创建此库的实例?我无法更改库中的任何代码,因为它是封闭源代码。

我的主题中的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实例?

1 个答案:

答案 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)