問題を引き起こしてJavaで複数のスレッド
-
12-09-2019 - |
質問
他の漠然と例えば申し訳ありません...しかし、私は新しいスレッドのインスタンスを始めている単一のクラスを持っています。私は新しいスレッドのインスタンスを追加する場合は、それが(破棄?)を中断最初ます。
しかし、(私はjarファイルにそれらを回した後、個別に)私はクラスの2つのインスタンスを実行する場合、各インスタンスは、単一のスレッドを開く場合、それらの両方が同時に、細かい実行します。
私はエラーが私はマルチスレッドを実装しています方法です確信しています。
を探すために、物事のための任意の提案ですか?ありがとう!漠然と例えば申し訳ありません。
解決
あなたは、任意のクラスはスレッドセーフであると仮定することはできません。
クラスの著者の の授業のスレッド安全性について、明示的でなければなりませんが、それはそうではないことは非常に一般的です。サーブレットなどの環境が本質的にmulitスレッドこれが本当の問題になることがあり得ることを考える。
あなたは、クラスを勉強し、もしあれば、メソッドは、スレッドセーフである、発見する必要があります。クラスInstanceOfClassIDontControlは、マルチスレッドアクセスによって混乱している静的変数を持っている可能性があります。あなただけではなく場合は、クラスを制御しませんが、でも、あなたが所有者のサポートを必要としている、そのソースを見ることはできません。
他のヒント
[OK]を、ここでの例です。
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の)インスタンス()で呼び出されたオブジェクトのアクションを破壊します。