本篇文章作为Java并发编程的前置重点知识,有助于理解乐观锁和悲观锁。
这个世界上只有两种锁-->
乐观锁:指的是在操作数据的时候非常乐观,乐观地认为别人不会同时修改数据,因此乐观锁默认是不会上锁的,只有在执行更新的时候才会去判断在此期间别人是否修改了数据,如果别人修改了数据则放弃操作,否则执行操作。
悲观锁:指的是在操作数据的时候比较悲观,悲观地认为别人一定会同时修改数据,因此悲观锁在操作数据时是直接把数据上锁,直到操作完成之后才会释放锁,在上锁期间其他人不能操作数据。
Java中大部分都是悲观锁,很多悲观锁本身也有一定的缺点,缺点即是:用户态和内核态的频繁切换消耗性能。
在这种背景下,乐观锁的思想应运而生。
再回到本篇主题。
用户级线程:应用程序管理的线程;优点:不需要内核模式特权,线程之间切换速度很快(不需要到内核态),
内核级线程:操作系统内核管理的线程,内核线程切换速度慢。
**用户线程完成系统调用的时候,还是要切换回用户态,继续执行代码的。
更多关于用户级线程和内核级线程,请移步
状态切换:
1,系统调用
比如:读写文件,申请内存(new对象时)等等,具体包括 进程、文件、设备、信息、通信等情况;
2,中断
3,异常
用户线程的阻塞和唤醒会映射到内核线程上,容易频繁引起内核态和用户态的切换。
比如Java中:AQS是基于用户态函数级别的锁;而jdk1.6之前的synchronized就是内核级别的重量级锁,本身会引起用户态到内核态的频繁切换。
标签:操作系统,用户,线程,切换,悲观,数据,内核 From: https://www.cnblogs.com/hangwei/p/16925610.html