对不起另一个模糊的例子......但我有一个类,我正在启动一个新的线程实例。但是,如果我添加一个新线程实例,它首先会中断(销毁?)。
但是,如果我运行该类的两个实例(分别在将它们转换为 jar 文件之后),其中每个实例只打开一个线程,它们都可以同时运行并且运行良好。
我确信错误是我实现多线程的方式。
对要寻找的东西有什么建议吗?谢谢!很抱歉这个模糊的例子。
对不起另一个模糊的例子......但我有一个类,我正在启动一个新的线程实例。但是,如果我添加一个新线程实例,它首先会中断(销毁?)。
但是,如果我运行该类的两个实例(分别在将它们转换为 jar 文件之后),其中每个实例只打开一个线程,它们都可以同时运行并且运行良好。
我确信错误是我实现多线程的方式。
对要寻找的东西有什么建议吗?谢谢!很抱歉这个模糊的例子。
您不能假设任意类是线程安全的。
类的作者应该明确他们类的线程安全性,但他们不这样做是很常见的。鉴于 Servlet 等环境本质上可能是多线程的,这可能是一个真正的问题。
您需要研究该类并发现哪些方法(如果有)是线程安全的。类 InstanceOfClassIDontControl 可能具有被多线程访问混淆的静态变量。如果您不仅无法控制课程,甚至看不到其来源,那么您将需要所有者的支持。
好的,这是一个例子:
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() 实例中调用的对象的操作。