Java中的多个线程导致问题

时间:2009-08-06 20:55:30

标签: java multithreading class implementation

对不起另一个模糊的例子......但是我有一个单独的类,我正在开始一个新的线程实例。但是,如果我添加一个新的线程实例,它会中断(破坏?)第一个。

但是,如果我运行该类的两个实例(在我将它们转换为jar文件之后单独运行),其中每个实例只打开一个线程,它们都会同时并运行。

我确信错误是我实现多线程的方式。

有关寻找事物的建议吗?谢谢!抱歉这个模糊的例子。

2 个答案:

答案 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()实例中调用的对象的操作。