对不起另一个模糊的例子......但是我有一个单独的类,我正在开始一个新的线程实例。但是,如果我添加一个新的线程实例,它会中断(破坏?)第一个。
但是,如果我运行该类的两个实例(在我将它们转换为jar文件之后单独运行),其中每个实例只打开一个线程,它们都会同时并运行。
我确信错误是我实现多线程的方式。
有关寻找事物的建议吗?谢谢!抱歉这个模糊的例子。
答案 0 :(得分:4)
您不能假设任意类是线程安全的。
类的作者应该明确其类的线程安全性,但是他们不这样做很常见。鉴于像Servlet这样的环境可能本质上是多线程的,这可能是一个真正的问题。
您需要研究该类并发现哪些方法(如果有的话)是线程安全的。 InstanceOfClassIDontControl类可能具有被多线程访问混淆的静态变量。如果你不仅没有控制班级,甚至看不到它的来源,那么你将需要业主的支持。
答案 1 :(得分:0)
好的,这是一个例子:
public class driver {
public static void main(String args[])
{
Thread x;
Thread y;
x = new Thread(new pow());
y = new Thread(new pow());
x.start();
y.start();
}
}
public class pow extends Thread {
public void run() {
InstanceOfClassIDontControl a = new InstanceOfClassIDontControl();
a.doVariousProcesses();
}
}
在这个例子中,我(显然)不控制在线程中创建和调用其实例的类。每个线程可能运行几分钟。但是无论何时运行并发线程(在这种情况下,使用y.start()),它都会破坏在x.start()的run()实例中调用的对象的操作。