java线程学习 可重入性

转载 2013年12月02日 15:15:19

java 内部锁机制:synchronized块,强制原子性。synchronized具有有可重入性。

可重入性:每一个锁关联一个获取计数值和一个所有者的线程。当一个锁的计数值为0,表示锁认为没有被其他线程所持有。当一个线程请求一个计数为0的锁时,虚拟机会记录下线程的锁的持有者,计数变为1。如果同一个线程再次获取这个锁时,计数递增,当线程退出锁时,计数递减。当计数为0时,锁释放。

(重入 锁的操作粒度是 ‘线程’  不是‘调用’)

public class a {
	public synchronized void say(){
        System.out.println("a");
	}
}
public class b extends a{
	public synchronized void say(){
		System.out.println("b");
		super.say();
	}
}

当一个线程获取b的say()代码块的锁后,这个线程已经拿到了b的锁,当调用父类中的say()方法的时,JVM会认为这个线程已经获取了b的锁,而不能再次获取,从而无法调用a的say()方法,照成死锁。重入则避免了这种死锁的发生。

相关文章推荐

【Java基础】线程笔记——可重入内置锁

每个 Java 对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁。线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁 获得内置锁的唯一途径就是进入由这个锁保护的同...

qt中的线程重入问题

昨天晚上写程序的时候遇到了一个问题,我想在子线程中操作父线程的类成员,但是每次都是在link的时候出现access violation,把子线程类声明成父线程的友元类也没用。   很费解,因为按照...

可重如函数 不可重入函数 线程安全函数 线程不安全函数

一、第一个说法 可重入函数     在实时系统的设计中,经常会出现多个任务调用同一个函数的情况。如果这个函数不幸被设计成为不可重入的函数的话,那么不同任务调用这个函数时可能修改其他任 务调用这个...

轻松学习java可重入锁(ReentrantLock)的实现原理

前言相信学过java的人都知道 synchronized 这个关键词,也知道它用于控制多线程对并发资源的安全访问,兴许,你还用过Lock相关的功能,但你可能从来没有想过java中的锁底层的机制是怎么实...

java并发编程实践学习(二)由可重入锁想到的

创建了一个子类对象的时候,在子类对象内存中,有两份数据,一份继承自父类,一份来自子类,但是他们属于同一个对象(子类对象),只不过是java语法提供了this和super关键字来让我们能够按照需要访问这...

java并发包学习系列:重入锁与Condition条件

这里介绍一下synchronized、wait、notify方法的替代品(或者说是增强版)-重入锁。重入锁是可以完全替代以上的内容的。并且重入锁的性能是远高于synchronized的,但是jdk6....
  • a910626
  • a910626
  • 2016年07月13日 19:43
  • 1120

Java并发:可重入与线程安全

转载请注明出处:jiq•钦'stechnical Blog1函数的可重入性:函数可重入,意味着该函数可以同时由多个任务调用,而不会产生任何错误。可重入的函数不需要考虑线程安全问题,因为其不会引用任何共...

Java多线程编程2--同步锁定--synchronized同步方法、脏读、锁重入

1、方法内的变量为线程安全   “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题(这是方法内部的变量是私有的特性造成的,所得结果也就是“线程安全”的了。 ...

Java 多线程同步问题的探究(三、Lock来了,大家都让开【1. 认识重入锁】)

我们已经了解了Java多线程编程中常用的关键字synchronized,以及与之相关的对象锁机制。这一节中,让我们一起来认识JDK 5中新引入的并发框架中的锁机制。 我想很多购买了《Java程序...

Java 并发与多线程规范(4) 自旋锁是可重入的吗?CAS与自旋锁的关系,CAS的ABA问题,以及乐观锁,悲观锁,互斥锁,读写锁的整理

CASCAS,自旋锁跟compare and set有关系,但是并不是CAS就是自旋锁。我们看一段代码:/* 不同线程检测最大值 */ AtomicLong largest = new...
  • kkgbn
  • kkgbn
  • 2017年07月19日 15:06
  • 347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java线程学习 可重入性
举报原因:
原因补充:

(最多只允许输入30个字)