最新文章列表

Lock使用

Lock是java.util.concurrent.locks包下的接口,Lock 实现提供了比使用synchronized 方法和语句可获得的更广泛的锁定操作,它能以更优雅的方式处理线程同步问题,可以支持多个相关的 Condition对象。使用最多的Lock类是ReentrantLock、ReentrantReadWriteLock.ReadLock、ReentrantReadWriteLo ...
wydyyhwzx 评论(0) 有421人浏览 2014-05-21 10:26

转 Java锁机制

内置锁     Java提供了一种内置的锁机制来支持原子性:同步代码块(synchronized 关键字 ),同步代码块包含两部分:一个作为锁的对象的引用,一个作为由这个锁保护的代码块。 synchronized {     //代码块 }      每个Java对象都可以用做一个实现同步的锁,这些锁被秒为内置锁(Intrinsic Lock)或监视锁(Monitor Lock),线程进 ...
milagro 评论(0) 有415人浏览 2014-05-15 17:14

MCS锁

1、 为什么要引入MCS锁?          在NUMA架构体系下,访问remote memory的速度要远远慢于访问local memory的速度。如下图所示(引自Companion slides for The Art of Multiprocessor Programming by Maurice Herlihy & Nir Shavit):  在前一篇文章中分析了CLH算法 ...
海浪儿 评论(1) 有2062人浏览 2014-05-10 15:27

python之跨进程锁的实现---fcntl

============================================================================ 原创作品,允许转载。转载时请务必以超链接形式标明原始出处、以及本声明。 请注明转自:http://yunjianfei.iteye.com/blog/ =========================================== ...
xiaoyu966 评论(0) 有6009人浏览 2014-05-05 17:45

Lock、ReentrantLock和AbstractQueuedSynchronizer的源码要点分析整理

前面已经说了很多Java并发和线程安全的东西,也提到并对比了内在锁和J.U.C包(java.util.concurrent包,后同)中Lock的锁。从这篇开始,对Java并发的整理从理论进入“实践”阶段,本篇对Lock、ReentrantLock和AbstractQueuedSynchronizer源码做简要分析和整理。先从Lock这个interface说起,然后分析ReentrantLock和 ...
milagro 评论(0) 有612人浏览 2014-03-27 16:16

深入JVM锁机制-Lock

本文继续分析JVM中的另一种锁Lock的实现。与synchronized不同的是,Lock完全用Java写成,在java这个层面是无关JVM实现的。 在java.util.concurrent.locks包中有很多Lock的实现类,常用的有ReentrantLock、ReadWriteLock(实现类ReentrantReadWriteLock),其实现都依赖java.util.concurr ...
milagro 评论(0) 有537人浏览 2014-03-27 16:15

Java线程安全杂谈——锁、状态依赖与协同以及锁优化

从谈Java并发开始synchronized和锁就时常被谈到,上篇讲Java内存模型特点的时候,也说道用synchronized几乎可以同时满足原子性、可见性和有序性三点,那本篇就来说一下锁的概念、synchronized和API层面Lock锁框架的比较选择。后面也会讲到状态依赖与协同问题、条件队列和锁优化。 先说说synchronized。synchronized关键字可谓是并发里的常见词,但 ...
milagro 评论(0) 有576人浏览 2014-03-26 14:44

关于synchronized, Lock, Condition

下面的内容摘自《深入理解Java7 核心技术与最佳实践》,作者:成富 Lock接口替代Synchronized关键词,相对应的Condition接口替代Object类的wait, notify和notifyAll方法。就如同使用wait,notify和notifyAll方法时不能脱离synchronized关键词一样,使用Condition接口时也需要与一个对应的Lock接口的实现对象关联起来。通 ...
darrenzhu 评论(0) 有599人浏览 2014-03-23 16:42

三个线程循环输出ABC10次

import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class ABC { private static int state=0; /** * @param args */ public static void main(String[] ...
janzxx 评论(0) 有886人浏览 2014-03-02 11:18

竞态条件与临界区

当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件。界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现。 有临界区是为了让更多的其它线程能安全够访问资源。 class Counter { protected long count = 0; public vo ...
cuisuqiang 评论(0) 有6559人浏览 2014-02-21 11:46

Condition 条件变量,线程通信更高效的方式

条件(也称为条件队列 或条件变量)为线程提供了一个含义,以便在某个状态条件现在可能为 true 的另一个线程通知它之前,一直挂起该线程(即让其“等待”)。因为访问此共享状态信息发生在不同的线程中,所以它必须受保护,因此要将某种形式的锁与该条件相关联。等待提供一个条件的主要属性是:以原子方式 释放相关的锁,并挂起当前线程,就像 Object.wait 做的那样   在Condition中,用a ...
cuisuqiang 评论(0) 有3233人浏览 2014-02-19 11:46

ReentrantLock与ReadWriteLock的使用

下面的内容基本上来自于《Java并发编程实践》, 留个记录~   一, ReentrantLock ReentrantLock实现了Lock接口,提供了与synchronized 相同的互斥和内存可见性的保证。获得ReentrantLock的锁与进入synchronized 块有着相同的内存语义;释放ReentrantLock锁与退出synchronized块有着相同的内存语义。下面是Loc ...
pi88dian88 评论(0) 有2710人浏览 2014-02-13 15:58

How to build a exclusive Lock

阻塞lock的基本流程 if(cas(0,acquire)) setExclusiveOwnerThread else if(current==getExclusiveOnwerThread) {      setState(c+acquires) } addWaiter park ........................ for(;;) { p = node.p ...
xussen 评论(0) 有770人浏览 2014-01-21 09:47

JDK源码阅读——ReentrantReadWriteLock

最近总结了下ReentrantReadWriteLock的学习,写的比较生硬。   点击阅读  
cjm0000000 评论(0) 有888人浏览 2014-01-15 22:55

Lock的实现原理

两种加锁方式: Synchronized(obj){do logic}:尝试获取obj的锁,如果无法获取则阻塞等待; Lock:它的实现原理和Synchronized完全不同,它使用compare and swap理念,如果符合cas判定逻辑,那么就修改state状态,把当前线程设定为独占,具体代码为: /** * Performs lock. Try ...
daniel0202 评论(0) 有1436人浏览 2014-01-15 17:27

java 锁的介绍及使用场景

volatile   volatile类型变量是:CPU直接读写变量所在的内存,而不是把变量copy到寄存器操作这样对变量的操作所线程都是可见的 这样做的结果是减少了并发时冲突的概率 但不能完全避免 ,并不是原子的;   sychronzied  独占锁,在高并发访问情况下,可能会引起上下文切换和线程调度(vmstats观察)   ReentrantLock   ReadWri ...
wj0573 评论(0) 有2642人浏览 2013-12-25 16:40

oracle数据库的锁类型

  数据库是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。 加锁是实现数据库并发控制的一个非常重要的技术。当事务在对某个数据对象进行操作前,先向系统发出请求,对其加锁。加锁后事务就对该数据对象有了一定的控制,在该事务释放锁之前,其他的事务不能对此数据对象进行更 ...
grefr 评论(0) 有1269人浏览 2013-12-10 16:31

Lock和synchronized同步的初步理解

    先看一下使用Lock的例子(javaDoc的例子):   其实看下java.util.concurrent.ArrayBlockingQueue的代码,就会发现,下面的put/take方法其实就是java.util.concurrent.ArrayBlockingQueue的put/take方法的实现。   import java.util.concurrent.locks. ...
dreamoftch 评论(0) 有1615人浏览 2013-12-06 11:31

简述synchronized和java.util.concurrent.locks.Lock的异同

简述synchronized和java.util.concurrent.locks.Lock的异同 源码来自一篇Java基础题 主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放(因为如果不在f ...
edr_ 评论(0) 有8228人浏览 2013-10-11 00:09

最近博客热门TAG

Java(141747) C(73651) C++(68608) SQL(64571) C#(59609) XML(59133) HTML(59043) JavaScript(54918) .net(54785) Web(54513) 工作(54116) Linux(50906) Oracle(49876) 应用服务器(43288) Spring(40812) 编程(39454) Windows(39381) JSP(37542) MySQL(37268) 数据结构(36423)

博客人气排行榜

    博客电子书下载排行

      >>浏览更多下载

      相关资讯

      相关讨论

      Global site tag (gtag.js) - Google Analytics