マルチスレッドに関して、同じオブジェクトに2つのスレッド(スレッド1とスレッド2)があるとします。スレッド1は同期されたmethod1()にあり、スレッド2はjavaで同時にsynchronized method2()を何らかの方法で入力できます。2つのスレッドがインスタンスレベルのロックで同時に2つの異なる同期メソッドに入る
私はここでスレッド1が同期されたmethod1()にロックされている必要があり、同期されたmethod1()を終了したときにのみ、オブジェクトのモニタでロックを解除する必要があります。したがって、Thread-2はThread-1がオブジェクトのモニター上でロックを解放して同期されたmethod2()に入るのを待たなければなりません。どのような方法によって、Javaで同時に
それでもアドバイスしてください、(同期方法2を入力するスレッド2によってどのような方法がある)は、任意のハックがあり、このことを達成するために場合は、以下の
は私のプログラム、儀式であります今私は、以下のプログラムの出力は以下の
inside M1()
t1--->RUNNABLE
inside M2()
t2--->RUNNABLE
あるようになりました。この上でアドバイスしてくださいすることは、私の更新されたコード
public class Test {
private final Object lockA = new Object();
private final Object lockB = new Object();
public void m1() {
synchronized(lockA) {
try {
System.out.println("inside M1()");
Thread.sleep(100);
}
catch (InterruptedException ie)
{}
}
}
public void m2() {
synchronized(lockB) {
try {
System.out.println("inside M2()");
Thread.sleep(100); }
catch (InterruptedException ie) {}
}
}
public static void main(String[] args) throws InterruptedException {
final Test t = new Test();
Thread t1 = new Thread()
{ public void run() { t.m1(); } };
Thread t2 = new Thread()
{ public void run() { t.m2(); } };
t1.start();
//Thread.sleep(500);
t2.start();
// Thread.sleep(500);
System.out.println("t1--->"+t1.getState());
System.out.println("t2--->"+t2.getState());
}
}
[2つの同期メソッドを同時に実行する](0120-919-03) –
両方のスレッドが取得済みであるという証拠はまだありません同じロックを同時に使用することができます。あなたが示唆していることは、基本的に想像がつかないことです。 – EJP
@EJP、Thnaksしかし、どのロックが取得されているかを簡単に証明できる方法を教えてください。ロック名を見る方法はありますか? –