【发布时间】:2017-05-03 12:19:12
【问题描述】:
我在一次采访中被问到关于多线程,假设你在同一个对象上有 2 个线程(Thread-1 和 Thread-2)。 Thread-1在同步的method1()中,Thread-2可以通过任何方式在java中同时进入同步的method2()。
我回答不 不,这里当 Thread-1 在同步方法 1() 中时,它必须在对象的监视器上保持锁定,并且只有当它退出同步方法 1() 时才会释放对象监视器上的锁定。因此,Thread-2 必须等待 Thread-1 释放对象监视器上的锁定,才能进入同步方法 2()。
但仍然请告知是否有任何方式 Thread-2 可以通过任何方式在 java 中同时输入同步的方法 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());
}
}
【问题讨论】:
-
这里仍然没有证据表明两个线程同时获得了相同的锁。你的建议基本上是不可想象的。
-
@EJP , Thnaks 但请告知您如何简单地证明获得了哪个锁有没有办法查看锁名称请告知
-
@Ejp 请也检查一下这个解决方案stackoverflow.com/a/15438792/5254989
标签: java multithreading