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中的多线程及synchronized锁重入的含义

多线程编程有两种方法: 1,继承Thread类 2,实现Runnable接口 注意点: 1,Thread.java类中的start()方法通知“线程规划器”此线程已经准备就绪,等待线程对象的run...
  • yinbucheng
  • yinbucheng
  • 2016年06月09日 08:02
  • 719

函数的可重入性理解

最近,项目要求可能需要做博通的交换芯片的驱动程序,涉及到多用户同时进行操作,和大量的数据处理,因此在进行代码架构的时候需要进行前期简单的验证设计。考虑到一点就是程序设计的可重入性。经过简单的搜索,在维...
  • wenchao126
  • wenchao126
  • 2013年01月05日 10:23
  • 3593

Java多线程/并发10、不可重入锁/自旋锁、可重入锁

锁分为可重入锁和不可重入锁。 可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 可重入锁:可以再次进入方法A,就是说...
  • soonfly
  • soonfly
  • 2017年04月28日 16:39
  • 1588

Java多线程01_可重入函数、可重入锁

1、简单介绍可重入函数和编码注意事项。 2、jdk可重入锁介绍及递归调用的示例。 3、实现自己的可重入锁。...
  • coffeelifelau
  • coffeelifelau
  • 2016年07月09日 02:40
  • 1053

可重入锁与自旋锁

转自:http://ifeve.com/java_lock_see4/ 锁作为并发共享数据,保证一致性的工具,在JAVA平台有多种实现(如 synchronized 和 ReentrantLoc...
  • GKQQQ
  • GKQQQ
  • 2017年05月03日 18:20
  • 599

函数可重入性(Reentrancy)概念详解

1.什么是可重入性 可重入的函数必须满足以下三个条件: (1)可以在执行的过程中被打断; (2)被打断之后,在该函数一次调用执行完之前,可以再次被调用(或进入,reentered)。 (3)再次调用执...
  • acs713
  • acs713
  • 2014年02月27日 11:05
  • 12844

深入理解可重入与线程安全

以下文字转载自:http://blog.csdn.net/feiyinzilgd/article/details/5811157 在多线程编程和信号处理过程中,经常会遇到可重入(re...
  • tangaowen
  • tangaowen
  • 2015年08月22日 08:57
  • 2746

可重入函数与线程安全的区别与联系

•概念 重入:即重复调用,函数被不同的流调用,有可能会出现第一次调用还没返回时就再次进入该函数开始下一次调用。 可重入:当程序被多个线程反复执行,产生的结果正确。 如果一个函数只访问自己的局部变...
  • hanjing_1995
  • hanjing_1995
  • 2016年07月17日 16:53
  • 2292

【Linux】可重入函数和线程安全的区别与联系

*****可重入函数        函数被不同的控制流程调用,有可能在第一次调用还没返回时就再次进入该函数,这称为重入。在进行链表的插入时,insert函数访问一个全局链表,有可能因为重入而造成错乱,...
  • Scenlyf
  • Scenlyf
  • 2016年07月30日 19:15
  • 2324

对比线程安全和可重入函数

1.什么叫线程安全 如果你的程序所在的进程中有多个线程在同时运行,而这些线程可能同时运行一段代码或同时访问一个对象,如果每次运行完这段代码或访问完这个对象之后,所得到的结果和单线程运行的结果一样,而其...
  • skyroben
  • skyroben
  • 2017年06月07日 18:04
  • 616
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java线程学习 可重入性
举报原因:
原因补充:

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