synchronized和lock的作用与对比】的更多相关文章

一.synchronized的作用 synchronized是java中的一个关键字,用于线程同步.1. 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象:2. 修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象:3. 修饰一个静态的方法,其作用的范围是整个静态方法,作用的对象是这个类的所有对象:4. 修饰一个类,其作用的范围是synchronized后面括号括起来的部分,作用的对象是…
知识点 1.线程与进程 在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程.关系是线程–>进程–>程序的大致组成结构.所以线程是程序执行流的最小单位,而进程是系统进行资源分配和调度的一个独立单位.以下我们所有讨论的都是建立在线程基础之上. 2.Thread的几个重要方法 我们先了解一下Thread的几个重要方法. a.start()方法,调用该方法开始执行该线程: b.stop()方法,调用该方法强制结束该线程执行: c.join方法,调用该方法等待该线…
死锁 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形.某一个同步块同时拥有"两个以上对象的锁"时,可能会发生"死锁"的问题. 死锁避免方法 产生死锁的四个必要条件: 1.互斥条件:一个资源每次只能被一个进程使用. 2.请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放. 3.不剥夺条件:进程已获得的资源,在未使用完之前,不能强行剥夺. 4.循环等待条件:若干进程之间形…
一.共享资源竞争问题 在Java语言的并发编程中,由于我们不知道线程实际上在何时运行,所以在实际多线程编程中,如果两个线程访问相同的资源,那么由于线程运行的不确定性便会在这种多线程中产生访问错误.所以为了避免这一情况的发生,我们在编程的时候需要把并发执行的线程中用于访问这一共享资源的方法进行同步处理,以避免并发对于共享资源产生的影响. 并发模式在解决线程冲突的问题时,基本上都是采用序列化访问共享资源的方案.这在我的理解中,就是我们要控制同一时刻只能让一个线程对这一共享资源进行访问. 二.sync…
目录 前言 synchronized用法 修饰方法 修饰实例方法 修饰静态方法 同步代码块 引出Lock Lock用法 子类:ReentrantLock 读写分离锁:ReadWriteLock Lock和synchronized比较 前言 多线程开发中,同步控制是必不可少的手段.而同步的实现需要用到锁,Java中提供了两种基本的锁,分别是synchronized 和 Lock.两种锁都非常常用,但也各有利弊,下面开始学习. synchronized用法 synchronized 是Java的关键…
写这篇文章之前,我去百度了一下啥叫锁,百度百科上写道:置于可启闭的器物上,以钥匙或暗码开启.确实我们一般理解的锁就是门锁,密码锁,但是在计算机科学中,锁又是啥,说实话,这个问题我也思考了很久,也没法很好的用一两句话就让人听得明白,也不想有人看到我的文章,然后将我的结论当作答案,我觉得最好的答案还是在探索的过程中得到的,接下来我们就好好探索一番. 作为一名java程序员,最开始接触到的锁就是synchronized,书本上是这么写的,老师也是这么说的,至于为啥叫锁,可能也没多少人真的去思考过.不知…
JVM底层又是如何实现synchronized的? 目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理. 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchro…
     目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea.本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理. 数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能会进一步追问:JVM底层又是如何实现synchronized的? 本文所指说的JVM是指Ho…
前言:在上面的博客说了synchronized的一些用法,下面我们再来看看lock,这个出现频率也是非常高的一个. 1:获取Lock锁的几种方式 前面说了synchronized有锁对象和锁类对象,当某个线程获取锁其他线程必须等待执行完毕才可继续进行,比如线程A先获取锁,但是出现异常导致的后果就是线程B无法获取锁,会出现死锁的情况(http://www.cnblogs.com/LipeiNet/p/6475851.html),那么我们一起看看Lock是如何解决的.lock有4种方式来获取锁 1:…
在分布式开发中,锁是线程控制的重要途径.Java为此也提供了2种锁机制,synchronized和lock.做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方. 我们先从最简单的入手,逐步分析这2种的区别. 一.synchronized和lock的用法区别 synchronized:在需要同步的对象中加入此控制,synchronized可以加在方法上,也可以加在特定代码块中,括号中表示需要锁的对象. lock:需要显示指定起始位置和终止位置.一般使用Reen…