专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

锁机制到加锁的必要性

ins518 2024-09-16 21:32:31 技术文章 15 ℃ 0 评论



锁在计算机编程终端和服务端的应用很多。后端应用的分层开发以依赖注入的方式通信相互 连接。代理模式的应用在分层解耦。应用终端的锁机制一般都是可视化的应用方式。计算机 应用中的锁种类很多 。锁的主要应用方式是保证区域的安全性。




JAVA 的 开 发 领 域 基 础 锁 机 制 是 同 步 代 码 块 。 锁 住 代 码 块 的 方 式 的 关 键 字 是 SYNCRONIZED 。RETRAINEDLOCK 是一种灵活性比较强的可重入锁 。同步锁是 JAVA 高并 发领域中的基础锁。多线程高并发是用户量请求量过大的必然结果。分布式流量分发是一种 解决高并发服务器过载的一种方式。很多的系统操作过程在前置端处理的结果对系统的性能 提升很大。现在的微服务框架处理高并发的方式就是前端限流,后端使用分布式微服务集群。 到达服务端的请求线程数量达到一定的数量级别,都会时而有时而又无的发生共有数据区的 线程操作安全问题 。计算机 CPU 的异步处理机制和分时间片的处理数据的方式决定着线程 安全问题的合理存在 。 同步锁 SYNCRONIZED LOCK 的设计可以让处理器的异步数据处理 编程同步的方式。同步锁会让全局资源的访问线程排队等待,一个一个线程一次获取处理数 据的权限 。 RETRAINEDLOCK 可以在任何的代码段加锁和释放锁 。 同步锁 SYNCHRONIZED 的 操 作 方 式 同 步 代 码 块 的时 候 , 预 留 了 一 个 传 递 锁 的 粒 度 大 小 的 操 作 。 同 步 锁 SYNCHRONZED 加在方法修饰符之前默认使用静态类的同步锁。一个类可以有很多的实例, 实例 OBJECT 的生命周期由JAVA 虚拟机接管 。同步锁还有粒度更细的参数是字段锁,字段 定义在类里面,作用域比实例 OBJECT 要小。程序开发的作用域一般决定着大部分变量的生 命 周 期 。 JAVA 中 的 同 步 锁 的 参 数 传 递 值 决 定 了 该 锁 锁 住 的 区 域 和 时 间 长 短 。 RETRAINEDLOCK 是受限制的基础可重入同步锁,使用方式没有 SYNCHRONIZED 所定义的 那么丰富。


计算机的底层硬件决定了锁的不同提现方式。现实世界花花绿绿,有入口的门就要有锁的存 在。现在有很多的密码锁,智能锁逐步在使用电子硬件绑定基础应用的方式加强安全性。悲 观锁使用同步线程的方式保证数据安全,会把所有操作全局资源的线程都同等处理。乐观锁 使用版本号机制更新数据,大量的操作线程使用版本号迭代区别对待。悲观锁锁住时间,乐 观锁会有很多的内存开销 。JAVA 虚拟机服务器端的堆 HEAP 的线程安全性基础类解决方 式就是同步锁 底层硬件寄存器 REGISTER 的指令操作方式也是随机异步 JAVA 使用 VOLITAILE 关键字对操作指令进行重排。VOLITAILE 保证寄存器全局数据资源不同的操作指 令可见。全局数据资源的数据可大可小,寄存器中的可操作数据并不是不可分割,不需要使 得数据保证原子性能 。操作指令也是存储在寄存器中,使用 VOLITALE JAVA 中的关键字说 明异步指令也在等待所有权限去操作全局资源。


JAVA 中有一种原子类比线程安全的数据结构处理数据量更小,可以作为多线程的操作变量 修饰符。AUTOMATICLONG AUTOMATIC INTEGER 是 JDK1.8 之后新添加的线程安全原子类。 优先级队列 PRIORITYQUEUE, CONCURRENTHASHMAP, COPYONREADWRITEARRAYLIST 都是 JAVA API 中封装好的线程安全数据结构。使用线程安全数据结构转载数据方式安全可 靠 ,但是它的底层实现细节都屏蔽封装不可见。


锁的类型根据不同的定义有不同的实现。基础概念锁使用同步机制保证数据安全。公平锁和 非公平锁,互斥锁, 自旋锁,读写锁,JAVA 中实现方式很多 。 多线程的异步处理数据方式 会产生数据安全性,加锁会产生一种死锁异常现象。死锁原因是锁也是一种计算机运行资源, 锁住的数据会被其它线程访问。A 锁操作 B 锁中的数据,B 锁操作 A 锁中的数据,造成 A 锁和 B 锁中的数据编程不可以触碰的状态。死锁的解决方式可以通过中间锁处理,和 JAVA 中的循环依赖需要一个中间依赖做交换,从而不会产生循环依赖引用。数据库中也会有很多 的死锁现象的存在。锁的粒度有大有小,表锁大一点行级锁小一点,字段锁锁住的就是表的 某个字段。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表