首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java分类

在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁分类。...介绍内容如下: 公平锁/非公平锁 可重入锁 独享锁/共享锁 互斥锁/读写锁 乐观锁/悲观锁 分段锁 偏向锁/轻量级锁/重量级锁 自旋锁 上面是很多锁名词,这些分类并不是全是指锁状态,有的指锁特性...互斥锁在Java具体实现就是ReentrantLock 读写锁在Java具体实现就是ReadWriteLock 乐观锁/悲观锁 乐观锁与悲观锁不是指具体什么类型锁,而是指看待并发同步角度。...从上面的描述我们可以看出,悲观锁适合写操作非常多场景,乐观锁适合读操作非常多场景,不加锁会带来大量性能提升。 悲观锁在Java使用,就是利用各种锁。...乐观锁在Java使用,是无锁编程,常常采用是CAS算法,典型例子就是原子类,通过CAS自旋实现原子操作更新。

94020
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java分类

    java分类 java锁 公平锁/非公平锁 公平锁是指多个线程按照申请锁顺序来获取锁。 非公平锁是指多个线程获取锁顺序并不是按照申请锁顺序,有可能后申请线程比先申请线程优先获取锁。...互斥锁在Java具体实现就是ReentrantLock 读写锁在Java具体实现就是ReadWriteLock 乐观锁/悲观锁 悲观锁是悲观认为,不加锁并发操作一定会出问题 乐观锁则认为对于同一个数据并发操作...从上面的描述我们可以看出,悲观锁适合写操作非常多场景,乐观锁适合读操作非常多场景,不加锁会带来大量性能提升。 悲观锁在Java使用,就是利用各种锁。...乐观锁在Java使用,是无锁编程,常常采用是CAS算法,典型例子就是原子类,通过CAS自旋实现原子操作更新。...自旋锁 在Java中,自旋锁是指尝试获取锁线程不会立即阻塞,而是采用循环方式去尝试获取锁(比如cas),这样好处是减少线程上下文切换消耗,缺点是循环会消耗CPU。

    47320

    Java中锁分类

    Java中锁分类一、介绍在Java锁可以分为以下这四类可重入锁、不可重入锁乐观锁、悲观锁公平锁、非公平锁互斥锁、共享锁二、详解1)可重入锁、不可重入锁当一个线程持有一个锁后,又想再持有这个锁时,发生情况...常见乐观锁实现包括版本号机制和CAS机制。JavaAtomic相关类,底层正是使用CAS。悲观锁:每个线程在访问,都要先进行上锁,这样其他线程就无法访问。...悲观锁适用于对数据更新操作比较频繁场景。当锁被别人占用时,线程只能进入等待阻塞阶段了。在Java中,synchronized和Lock相关类都属于悲观锁。...Javasynchronized就是一款非公平锁,而Lock锁两者皆可,是可以进行设置。...4)互斥锁、共享锁线程持有锁后,其他线程同时持有这把锁,通过这样特性进行区分互斥锁:不同线程不能同时持有同一把锁共享锁:不同线程允许同时持有同一把锁在Java中,synchronized关键字就是一把互斥锁

    8700

    Java中锁分类

    锁是多线程并发问题中重要组成,接着上一篇文章,今天就简单总结一下Java中各种锁如何分类。...Java中锁分为以下几种: 乐观锁、悲观锁 独享锁、共享锁 公平锁、非公平锁 互斥锁、读写锁 可重入锁 分段锁 锁升级(无锁 -> 偏向锁 -> 轻量级锁 -> 重量级锁) JDK1.6 这些锁分类并不全是指锁状态...,有的指锁特性,有的指锁设计,下面总结内容是对每个锁名词进行一定解释。...所以一个线程在拿数据时候都会顺便加锁,这样别的线程此时想拿这个数据就会阻塞。比如Java里面的synchronized关键字实现就是悲观锁。实现方式:就是加锁。...分段锁设计目的是细化锁粒度,当操作不需要更新整个数组时候,就仅仅针对数组中一项进行加锁操作。

    2.1K30

    Java分类

    分类 从宏观上分为乐观锁与悲观锁 乐观锁 乐观锁是一种乐观思想,认为读多写少,遇到并发可能性低,每次拿数据时候并不会上锁,因为认为不会被别人修改。...互斥锁与读写锁 其实是独享锁与共享锁具体说法;互斥锁Java中实现就是ReentrantLock,而读写锁Java实现是ReadWriteLock。 分段锁 实质上是一种锁策略,并不是具体锁。...归根结底分段锁是用来细化锁粒度。 偏向锁 从始至终只要一个线程请求一把锁。同步代码一直被一个线程访问,线程自动获取锁。 Java偏向锁是Java6引入一项多线程优化。...重量级锁 它是Java基础锁,在这种状态下,Java虚拟机会阻塞加锁失败线程,并且在目标锁被释放时候,唤醒这些线程。Java中synchronized就是一种重量级锁。...什么是Java对象头 Java对象头包括两部分信息,分别是Mark Word与元数据指针,Mark Word用于存储对象运行时数据,比如HashCode、锁状态标志、Gc分代年龄、线程持有的锁等,而元数据指针用于指向方法区中目标类元数据

    75510

    Java NIO之JavaIO分类

    前言  前面两篇文章(Java NIO之理解I/O模型(一)、Java NIO之理解I/O模型(二))介绍了,IO机制,以及几种IO模型内容,还有涉及到设计模式。...这次要写一些更贴近实际一些内容了,终于要说到了Java各种IO了。我也是边学边理解,有写不对地方,欢迎小伙伴们指出和补充。...JavaIO分类 BIO BIO是指 Blocking IO 在JDK1.0时候就引入了,直到JDK1.4一直都是Java中唯一IO方式。...NIO JavaNIO其实就是使用多路I/O复用模型,前面的文章已经介绍过原理了,但是在理解JavaNIO之前,还是先介绍几个Java NIO基础概念:Channel(通道),Buffer(缓冲区...通道作用是将数据移入或移出道各种I/O源,即可读又可写。 在Java中Channel类层次结构相当复杂,有多个接口和许多可选操作。不过,常用也就几个。

    51220

    Java Review - 并发编程_锁分类

    updateEntry执行结束 代码(2)则对获取记录进行修改,代码(3)把修改内容写回数据库,同样代码(3)update方法也没有开启新事务,而是加入了updateEntry事务。...具体来说,根据 update 返回行数让用户决定如何去做。 将上面的例子改为使用乐观锁代码如下。...公平锁与非公平锁 根据线程获取锁抢占机制,锁可以分为公平锁和非公平锁 公平锁表示线程获取锁顺序是按照线程请求锁时间早晚来决定,也就是最早请求锁线程将最早获取到锁。...可重入锁两个关键字: 线程标示 + 计数器 自旋锁 由于Java线程是与操作系统中线程一一对应,所以当一个线程在获取锁(比如独占锁)失败后,会被切换到内核状态而被挂起。...而从用户状态切换到内核状态开销是比较大,在一定程度上会影响并发性能。

    33020

    为什么javaexception需要分类 | Java Debug 笔记

    前言==java中有异常抛出、既然是异常为什么还要分那么多种情况问题描述====我程序无缘无故会既不报错也不执行。...上面是自己一个演示代码当在主程序中调用其他方法时。刚开始担心别人方法不稳定所以加上异常。这样是为了保证自己业务不会因此奔溃。但是不知道当时咋想在catch里面没有加上日志。...这里化个重点凡是捕获异常必须要加上处理最起码需要日志问题解决====虽然异常处理是个小问题但是也是对原理不了解导致。或者说是不规范导致,捕获了异常却不做任何处理这本身就是一种不规范。...这样就会失去捕获意义。总结==什么是异常异常是指在程序执行期间有些事无法通过实现代码层面上做出判断。依赖于数据产生可能情况分类--Throwable是异常父类,所有的异常都是从这里衍生来。...参数不合法异常ArrayStoreException数组异常处理异常上面我在演示中是通过try 、 catch 实现异常捕获

    9610

    Java异常体系和分类

    文章目录 异常概念 异常体系 异常分类 异常产生过程解析 异常概念 异常,就是不正常意思。...在Java等面向对象编程语言中,异常本身是一个类,产生异常就是创建异常对象并抛出了一个异常对象。Java处理异常方式是中断处理。...异常体系 异常机制其实是帮助我们找到程序中问题,异常根类是java.lang.Throwable,其下有两个子类:java.lang.Error与java.lang.Exception,平常所说异常指...java.lang.Exception。...异常分类 我们平常说异常就是指Exception,因为这类异常一旦出现,我们就要对代码进行更正,修复程序。 异常(Exception)分类:根据在编译时期还是运行时期去检查异常?

    30130

    java中缓存分类总结

    下面从什么是缓存、为什么使用缓存、缓存分类以及对每种缓存使用分别进行分析,从而对缓存有更深入了解。...1.什么是缓存 在使用缓存前我们应该了解什么是缓存,下面是维基百科上面对于缓存定义: 缓存是在计算机上一个原始数据复制集,以便于访问 缓存在计算机系统中被广泛应用,从缓存定义来看,缓存是计算机上原始数据复制集...,因此对于缓存使用与应用场景密切相关,在不同场景上会有不同意义。...吞吐量:系统在单位时间内处理请求数量 3.缓存分类 对于java程序开发者来说,根据缓存在软件系统中所处位置不同,缓存大体可以分为三类: 客户端缓存 服务端缓存 网络中缓存 下面主要针对客户端缓存和网络中缓存简单说明...本地缓存存在问题: 本读缓存数据直接保存在JVM中,需要考虑缓存数据大小、JVM垃圾回收性能消耗 单服务是集群部署时候,应该考虑是否需要做集群中本地缓存数据同步 在实际开发中可以自己实现简单本地缓存也可以使用开源本地缓存框架

    2.2K20
    领券