1.线程状态 如上图,当我们新建一个线程,并start后,其实不一定会马上执行,因为只有操作系统调度了我们的线程,才能真正进行执行,而操作系统也随时可以运行其他线程,这时线程又回到可运行状态。这个过程是操作系统控制的,不是我们能控制的。我们能控制的是将线程变为blocked,并 ...
1.线程状态
如上图,当我们新建一个线程,并start后,其实不一定会马上执行,因为只有操作系统调度了我们的线程,才能真正进行执行,而操作系统也随时可以运行其他线程,这时线程又回到可运行状态。这个过程是操作系统控制的,不是我们能控制的。我们能控制的是将线程变为blocked,并从blocked变为runable状态。
在以前实验的wait和notify中,我当时并没有注意到notify后会进行锁阶段,以为notify后直接进入runable状态,等待操作系统调度。 从上面的图中可以看到,我们notify后,实际现场进入了locked状态,一个线程时就直接进入runable状态了,但是在多线程的情况下,因为我们wait或者notify时都是在同步中做的,只有获得同步锁的线程才有机会进入runable,其他线程还得等待。
因此在这里主要是学习一下锁的原理
2.锁
1).内置锁
java的每个对象都可以用作一个同步锁,这个锁就是内置锁,或者监视锁,通过同步方法或者代码块获得内置锁,也就是运用synchronized关键字字
2).显示锁
jdk提供的高级锁,比如Lock、Condition等,主要用于内置锁不方便实现的功能
3.锁的一些特性
1).可重入
java线程时基于每线程计算锁的,在同一个线程中,可以再次进入该同步方法,而不会造成死锁。进入一次计数器加1,退出后减1。
/** * 同步方法 * @author tomsnail * @date 2015年4月18日 下午12:15:30 */ public synchronized void test1(){ test1(); }
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:重学JAVA基础(八):锁的基本知识
关键词:JAVA
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。