
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在上文中给大家简单介绍了软件开发项目中线程池配置与应用问题等内容,而本文我们就继续来了解一下,软件开发线程安全问题与锁的应用方式。
什么是线程安全?
线程安全,有两个重要的特征说明:“共享”和“可变”。
共享是指可以被多个线程同时访问;
可变是指变量的值在生命周期内是可以变化的;
如何实现线程安全
一个对象是否需要线程安全的,取决于它是否被多个线程访问;
如何保证一个对象的线程安全,则需要采用同步机制来协同对对象可变状态的访问;
给线程安全下一个明确的定义:当多个线程访问这个对象或者资源时,如果这个对象或资源始终都能表现出数据的一致性的状态,那么就称这个对象或者资源是线程安全的;
数据资源的有无状态化
无状态的对象一定是线程安全的。
有状态的对象,多线程环境下,多个线程共享资源,且进行的不是原子性操作,这个时候就要考虑线程的安全控制问题
Java锁机制的一些特点
监视锁、互斥锁、可重入锁都是在这个锁的特点。
监视锁:java的每一个对象都可以用来做监视锁,也就是为什么我们的wait、notify方法定义在Object类的原因。
互斥锁:表示多只有一个线程可以持有这把锁。
可重入锁:是指当线程A请求一个由线程B持有的锁时,线程B会进入阻塞状态;而如果线程A如果再访问另一段代码,而这个代码的锁是已经被线程A持有的,这个时候请求是可以成功的,这就叫可重入。
Java锁机制的简单原理
JVM为每个锁设置两个属性,获取计数值和所有者线程,当计数值为0时,这个锁就被认为是没有被任何线程持有,当线程请求一个未被持有的锁时,JVM将记录锁的持有者,并且计数值+1。
如果同一个线程再次获取这个锁,则计数值将递增,而当线程退出同步代码块时,计数器会相应递减,当计数值为0,这个锁将被释放。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。