手抄报 安全手抄报 手抄报内容 手抄报图片 英语手抄报 清明节手抄报 节约用水手抄报

如何判断当前线程是否持有锁

时间:2024-10-13 06:04:13

1、第一步:实现思路。1、要实现此次功能的测试我们需要借助于java.lang.Thread中有一个方法叫holdsLock(),它是一个由native修饰的非java代码实现的方法。2、java的native关键字标示一个方法就是一个java调用非java代码的接口。如下图所示。3、借助于Object类的wait()方法,wait抛出IllegalMonitorStateException异常,表示当前的线程没有获得对象的锁。

如何判断当前线程是否持有锁

2、第二步:holdsLock()代码实现。第一种借助于holdsLock()方法代码如下所示:public static void main(Strin爿讥旌护g[] args) { try { new ThreadTest().testHoldsLock(); }catch (Exception e) { e.printStackTrace(); }}//它返回true表示当且仅当当前线程拥有某个具体对象的锁public void testHoldsLock() throws Exception { Object object = new Object(); new Thread(new Runnable() { @Override public void run() { synchronized(object) { System.out.println(Thread.currentThread().getName()+"有锁: " + Thread.holdsLock(object)); } } }).start(); System.out.println(Thread.currentThread().getName()+"无锁: " + Thread.holdsLock(object)); Thread.sleep(2000);}

如何判断当前线程是否持有锁
如何判断当前线程是否持有锁
如何判断当前线程是否持有锁

3、第三步:wait代码实现。第二种具体实现代码如下所示:public static void main(String[] args) { try { new ThreadTest().testWait(); }catch (Exception e) { e.printStackTrace(); }}public void testWait() throws Exception { Object object = new Object(); new Thread(new Runnable() { @Override public void run() { synchronized(object) { try { object.wait(10); System.out.println(Thread.currentThread().getName()+"有锁"); } catch (InterruptedException e) { System.out.println(Thread.currentThread().getName() +"无锁"); } } } }).start(); try { object.wait(); System.out.println(Thread.currentThread().getName() +"有锁"); } catch (IllegalMonitorStateException e) { System.out.println(Thread.currentThread().getName() +"无锁"); } Thread.sleep(2000);}

如何判断当前线程是否持有锁
如何判断当前线程是否持有锁
如何判断当前线程是否持有锁
如何判断当前线程是否持有锁
© 手抄报圈