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

 时间: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);}

如何判断当前线程是否持有锁如何判断当前线程是否持有锁如何判断当前线程是否持有锁如何判断当前线程是否持有锁
  • 如何将Excel里的特殊数值变成想要输入的内容
  • 保证与告知的 区别
  • FOCI专注者应该应该怎样强制停止
  • excel中,VLOOKUP函数的各种查询方法
  • 百词斩中收藏的单词在哪里可以找到?
  • 热门搜索
    纯玩旅游 香港有哪些旅游景点 淮安旅游网 国庆旅游推荐 古北口镇旅游攻略 澳大利亚旅游地图 旅游签证有效期 宝中旅游官网 郑州旅游网 呼伦贝尔旅游网