我想在同一主方法中實例化兩個TCP服務器應用程序。這些服務器類使用大量的靜態和線程本地字段。是否有機會像在不同的應用程序域中一樣加載類?使用類加載器來隔離兩個靜態類
這是我的測試案例:
儀類有設置全局靜態對象簡單的getter和setter方法。
public class Tester {
public Tester() {
System.out.println(getClass().getClassLoader());
}
public void setText(String text) {
GlobalObject.globalText = text;
}
public String getText() {
return GlobalObject.globalText;
}
}
這是可從任何地方訪問的全局對象。我想限制對這個對象的訪問。
public class GlobalObject {
public static String globalText;
}
這是我的測試程序。
public class Main {
public static void main(String[] args) {
// Default class loader;
Tester ta1 = new Tester();
ta1.setText("test");
System.out.println(ta1.getText());
Tester ta2 = new Tester();
System.out.println(ta2.getText());
// Custom class loader;
CustomClassLoader ccl = new CustomClassLoader();
try {
Tester tb = (Tester) ccl.loadClass("Tester").newInstance();
System.out.println(tb.getText());
} catch (Exception e) {
e.printStackTrace();
}
}
}
的輸出繼電器是:
[email protected]
test
[email protected]
test
[email protected]
test
我想要的輸出:
[email protected]
test
[email protected]
test
[email protected]
null
我不能強烈建議你放棄可變靜態和線程本地人,以支持寫得很好的代碼! [添加十一個你的口味] – 2010-09-16 13:26:15