synchronized和Lock的异同】的更多相关文章

本文转载自java中synchronized与Lock的异同 前言 synchronized和Lock通过互斥保障原子性,能够保护共享数据以实现线程安全,其作用包括保障原子性.可见性.有序性 常见问题 在平时聊天或者面试过程中,可能会被问到,既然已经有了synchronized了,为什么JSR166小组花这么多时间来开发j.u.c的Lock框架呢,换句话说就是内部锁和显示锁之前有什么区别? 分析 synchronized(内部锁) java平台中的任何一个对象都有唯一一个与之关联的锁,这种锁称为…
JAVA语言使用两种机制来实现堆某种共享资源的同步,synchronized和Lock.其中,synchronized使用Object对象本身的notify.wait.notifyAll调度机制,而lock可以使用Condition进行线程之间的调度,完成synchronized实现所有功能. 具体而言,两者的主要区别主要表现在以下几个方面: 1)用法不一样.在需要同步的对象中加入synchronized控制,synchronized既可以加在方法上,也可以加在特定代码中,括号中表示需要锁的对象…
主要相同点:Lock 能完成 synchronized 所实现的所有功能 主要不同点:Lock 有比synchronized 更精确的线程语义和更好的性能. synchronized 会自动释放锁,而 Lock 一定要求程序员手工释放,并且必须在finally 从句中释放. synchronized 有两种操作模式: 1.同步代码块: synchronized (锁定对象){代码}; 2.同步方法: public synchronized 返回值 方法名称(){代码}; java 锁 Lock接…
本文Demo下载传送门 写在前面 本篇文章讲的东西都是Android开源网络框架NoHttp的核心点,当然线程.多线程.数据安全这是Java中就有的,为了运行快我们用一个Java项目来讲解. 为什么要保证线程安全/数据同步 当多个子线程访问同一块数据的时候,由于非同步访问,所以数据可能被同时修改,所以这时候数据不准确不安全. 现实生活中的案例 假如一个银行帐号可以存在多张银行卡,三个人去不同营业点同时往帐号存钱,假设帐号原来有100块钱,现在三个人每人存钱100块,我们最后的结果应该是100 +…
最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用到了一些并发的知识.为了实现这些要求,后台使用一个队列作为缓存,对于请求只管往缓存里写数据.同时启动一个线程监听该队列,检测到数据,立即请求调度线程,对数据进行处理. 具体的使用方案就是使用同步保证数据的正常,使用线程池提高效率.   同步的实现当然是采用锁了,java中使用锁的两个基本工具是 synchronized 和 Lock.   一直很喜欢synchronized,因为使用它很方便.比…
JVM底层又是如何实现synchronized的? 目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理. 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchro…
最近在做一个监控系统,该系统主要包括对数据实时分析和存储两个部分,由于并发量比较高,所以不可避免的使用到了一些并发的知识.为了实现这些要求,后台使用一个队列作为缓存,对于请求只管往缓存里写数据.同时启动一个线程监听该队列,检测到数据,立即请求调度线程,对数据进行处理. 具体的使用方案就是使用同步保证数据的正常,使用线程池提高效率.   同步的实现当然是采用锁了,java中使用锁的两个基本工具是 synchronized 和 Lock.   一直很喜欢synchronized,因为使用它很方便.比…
     目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理. 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchronized的? 本文所指说的JVM是指Ho…
一.共享资源竞争问题 在Java语言的并发编程中,由于我们不知道线程实际上在何时运行,所以在实际多线程编程中,如果两个线程访问相同的资源,那么由于线程运行的不确定性便会在这种多线程中产生访问错误.所以为了避免这一情况的发生,我们在编程的时候需要把并发执行的线程中用于访问这一共享资源的方法进行同步处理,以避免并发对于共享资源产生的影响. 并发模式在解决线程冲突的问题时,基本上都是采用序列化访问共享资源的方案.这在我的理解中,就是我们要控制同一时刻只能让一个线程对这一共享资源进行访问. 二.sync…
前言:在上面的博客说了synchronized的一些用法,下面我们再来看看lock,这个出现频率也是非常高的一个. 1:获取Lock锁的几种方式 前面说了synchronized有锁对象和锁类对象,当某个线程获取锁其他线程必须等待执行完毕才可继续进行,比如线程A先获取锁,但是出现异常导致的后果就是线程B无法获取锁,会出现死锁的情况(http://www.cnblogs.com/LipeiNet/p/6475851.html),那么我们一起看看Lock是如何解决的.lock有4种方式来获取锁 1:…