Java教程

JAVA基础进阶学习(14)--线程锁

本文主要是介绍JAVA基础进阶学习(14)--线程锁,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

总结一 :认识同步监视器(锁)

synchronize(同步监视器){

1.必须是引用数据类型,不能是基本数据类型;

2.在同步代码块中可以改变同步监视器对象的值,但不能改变引用类型;

3.尽量不要使用String和包装类Integer做同步监视器,如果使用了,只要保证代码块中不对其进行任何操作也没有关系;

4.一般只要给共享资源使用同步监视器即可;

5.建议使用final修饰同步监视器;

}

总结二 :同步代码块的执行过程

1.第一个线程来到同步代码块,发现同步监视器OPEN状态,需要先CLOSE,然后执行逻辑代码;

2.第一个线程执行过程中,发现了线程切换(阻塞、就绪),第一个线程失去cpu,但是锁依旧把持没有open;

3.第二个线程获取了CPU,来到了同步代码块,发现同步监护器CLOSE,无法打开,所以不能执行逻辑代码,第二个线程也进入阻塞状态;

4.第一个线程再次获取CPU,执行后续逻辑代码并完成,释放锁close;

5.第二个线程获取到cpu,来到同步代码块,先加锁,执行逻辑代码(重复该流程)。

注意:同步代码块中可以切换线程,但是由于锁处于close状态,所以新线程并不能执行,只能处于阻塞状态!

总结三:

线程同步优点:安全

缺点:效率低,容易死锁

 

这篇关于JAVA基础进阶学习(14)--线程锁的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!