一聚教程网:一个值得你收藏的教程网站

热门教程

java synchronized加载加锁-线程可重入详解及实例代码

时间:2022-06-29 01:41:49 编辑:袖梨 来源:一聚教程网

java synchronized加载加锁-线程可重入

实例代码:

 代码如下复制代码

publicclassReGetLockimplementsRunnable {

 

  @Override

  publicvoidrun() {

    get();

  }

 

  publicsynchronizedvoidget() {

    System.out.println(Thread.currentThread().getId());

    set();

  }

 

  publicsynchronizedvoidset() {

    System.out.println(Thread.currentThread().getId());

  }

 

  publicstaticvoidmain(String[] args) {

    ReGetLock rgl =newReGetLock();

    newThread(rgl).start();

  }

 

}

执行代码的线程到底能不能进入到set方法呢?

因为线程rgl先调用了get方法,获取到了ReGetLock对象的锁,那么当线程rgl想进入标有synchronized 关键字的set方法时,会被阻塞住,一直等待吗?

其实是不会的,在JAVA里面,当某个线程试图获得一个已经由它自己持有的锁,那么这个请求会成功。不然会出现死锁。

因此像synchronized 这种加锁机制,线程是可重入的。

热门栏目