证明synchronized同步的方法是可重入的
来源:互联网 发布:ahc正品验证软件 编辑:程序博客网 时间:2024/06/05 00:52
synchronized是用来在多线程程序中同步方法或同步类对象的关键字。使用synchronized同步一个方法时,当一个线程进入此方法时,需要先获取到当前实例的锁或当前类对象的锁,当获得锁则进入,其他线程就无法在在获得锁,知道已经获得锁进入方法的线程释放锁之后其他线程才有机会获得锁并进入方法。
然而,锁又分为分为可重入锁和不可重入锁。肯定有人疑惑:”线程的同步不就是为了防止多个线程同时进入某一个方法而导致数据的不一致性嘛,这么说同步的方法一次只有一个线程能执行,那么肯定都是不可重入的呀?“。这个理解是错误的,首先明确一点,同步的方法一次只有一个线程能进入并执行,但是可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,则这个线程在没有释放这把锁的时候,能否再次进入方法A呢?
可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A(方法A递归)。
不可重入锁:不可以再次进入方法A,也就是说获得锁进入方法A是此线程在释放锁钱唯一的一次进入方法A。
在此证明synchronized是可重入锁。
ReentrancyTest.java
package SynchronizedTest;/** * Created by carrot on 16/8/31. */public class ReentrancyTest { private static int comunt = 0; private static synchronized void func(int seed) { func2(seed); } private static void func2(int seed) { if (seed <= 100) { comunt += seed; func(++seed); } return; } public static void main(String[] args) { func(1); System.out.println(comunt); }}
0 0
- 证明synchronized同步的方法是可重入的
- synchronized 同步的几种方法
- synchronized 线程同步的三种方法
- 从头认识多线程-2.11 通过同步代码块证明synchronized标记的是对象锁
- synchronized方法和同步块的作用范围;synchronized(this)和synchronized(obj)的区别
- 线程-synchronized方法和同步块的作用范围;synchronized(this)和synchronized(obj)的区别
- 线程-synchronized方法和同步块的作用范围;synchronized(this)和synchronized(obj)的区别
- 同步synchronized的问题
- Synchronized同步的考虑
- synchronized同步的级别
- 线程的同步synchronized
- synchronized 同步的
- synchronized--同步的
- Synchronized同步的考虑
- 证明:非static方法的synchronized方法获取的锁是对象锁
- synchronized修饰的同步方法的个人理解
- 线程同步问题 解决同步问题的方法 synchronized方法 同步代码块
- 递归的证明方法
- arm应用程序之文件读写操作差异open与fopen
- 封装
- 将对象转化为XML格式的字符串
- computer vision-calculate fundamental matrix
- 快速幂取模算法
- 证明synchronized同步的方法是可重入的
- 电路与Multisim 变压器的使用示例
- Understanding LSTM Networks
- Codeforces Round #210 (Div. 2)
- css3和jq使用
- 单隐层BP神经元个数对迭代步数和预测误差的影响
- Android 购物车效果
- android逆向8
- Android Fragment生命周期