1

对不起另一个模糊的例子......但我有一个类,我正在启动一个新的线程实例。但是,如果我添加一个新线程实例,它首先会中断(销毁?)。

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

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

对要寻找的东西有什么建议吗?谢谢!很抱歉这个模糊的例子。

4

2 回答 2

4

您不能假设任意类是线程安全的。

类的作者应该明确他们类的线程安全性,但他们不这样做是很常见的。鉴于 Servlet 等环境本质上可能是多线程的,这可能是一个真正的问题。

您需要研究该类并发现哪些方法(如果有)是线程安全的。类 InstanceOfClassIDontControl 可能具有被多线程访问混淆的静态变量。如果您不仅无法控制课程,甚至看不到其来源,那么您将需要所有者的支持。

于 2009-08-06T21:35:38.907 回答
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() 实例中调用的对象的操作。

于 2009-08-06T21:13:56.877 回答