Java线程与并发编程实践----锁框架

Java.util.concurrent.locks包提供了一个包含多种接口和类的框架,它

针对条件进行加锁和等待。不同于对象的内置加锁同步以及java.lang.Object的等

待/通知机制,包含锁框架的并发工具类通过轮询锁、显示等待及其它方式改善这种

机制。

锁框架包含了经常使用的锁、重入锁、条件、读写锁以及冲入读写锁等类别。

一、锁(Lock)

Lock 实现提供了比使用 synchronized 方法和语句可获得的更广泛的锁定操作。此实

现允许更灵活的结构,可以具有差别很大的属性,可以支持多个相关的 Java线程与并发编程实践----锁框架

原文地址:http://blog.51cto.com/12222886/2063429

时间: 2024-10-28 22:03:26

Java线程与并发编程实践----锁框架的相关文章

Java线程与并发编程实践----同步器(交换器、信号量)

一.交换器 交换器提供了一个线程之间能够交换对象的同步点.每个线程都会往这个 交换器的exchange()方法传入一些对象,匹配伙伴线程,同时接受伙伴对象作为返 回值.java.util.conurrent.Exchange<V>实现了交换器. 下面是一个代码小实例: import java.util.concurrent.Exchanger;   import java.util.concurrent.ExecutorService;   import java.util.concurren

Java线程与并发编程实践----并发工具类与Executor框架

java5之前,我们使用诸如synchronized,wait(),notify()方法对线程的操作属于对 底层线程的操作,这样会出现很多的问题: 低级的并发原语,比如synchronized,wait(),notify()经常难以正确使用.误用会导致 竞态条件,线程饿死,死锁等风险. 泰国依赖synchronized会影响程序性能以及程序的可扩展性 开发者经常需要高级线程结构,如线程池,信号量.java对底层线程的操作不包含这些结. 为解决这些问题,java5引入并发工具类,该工具类主要有下面

Java线程与并发编程实践----额外的并发工具类

一.并发集合 java.util包下提供了很多的集合类,如ArrayList.TreeSet.HashMap,但是这些 集合都是非线程安全的,并且对于单列集合的迭代器,采用的是快速失败机制,当正在迭代 遍历的集合被其它线程修改时,便会抛出 java.util.ConcurrentModificationException. 这显然对于多线程操作的集合是十分不方便的,但早Colections这个工具类中有方法可以返回 线程安全的集合,然而这种集合对于高并发环境,性能十分低下. 于是,java.ut

java线程与并发编程实践(一)

一.给出线程的定义     线程就是一条在程序代码中独立执行的路径 二.给出runnable的定义 一个runnable就是一段封装在对象中的代码序列,它的类实现了runnable接口 三.Thread类和runnable接口完成了什么? 类Thread提供了一个底层操作系统的线程架构的统一接口.Runnable接口为关联了Thread对象的线程提供了执行代码. 四.指出创建一个Runnable对象的两种方式? 创建一个实现Runnable接口的匿名类或者lambda表达式 Runnable r

Java线程与并发编程实践----同步器(倒计时门闩)

Java提供的synchronized关键字对临界区进行线程同步访问.由于基于synchronized很难 正确编写同步代码,并发工具类提供了高级的同步器.倒计时门闩(countdown latch).同步屏 障(cyclic barrier).交换器(exchanger).信号量(semaphore)以及phaser同步器.下面主要 介绍倒计时门闩. 倒计时门闩会导致一条或多条线程在"门口"一直等待,直到另一条线程打开这扇门,线程 才得以继续运行.他是由一个计数变量和两个操作组成的,

Java线程与并发编程实践----等待通知(生产者消费者问题)线程

Java提供了一套API来支持线程之间的交互.在Object类中提供了一套等待通知的API  wait()     notify()     notifyAll()     此处要注意的是,绝不要在循环外面调用wait()方法.(单独开一片文章来讨论)     下面使用消费者与生产者问题来展示以上API的使用: package xiancheng; public class PC { public static void main(String[] args) { Shared s = new 

[Java 并发] Java并发编程实践 思维导图 - 第二章 线程安全性

根据<Java并发编程实践>一书整理的思维导图.

并发编程实践四:实现正确和高效的锁

你是否觉得锁是一种很神奇的东西,在并发编程中,你只需要将你的代码加上锁,就能保证代码是线程安全的(当然现实和感觉有很大差别,代码的线程安全是非常复杂的),那么,这些都是怎么做到的呢?当存在大量线程同时竞争锁时,竞争失败的锁会怎么做呢?锁又是怎么保证这一切高效的执行的呢?这篇文章将为你回答这些问题,首先我将介绍怎样实现一个正确的锁,然后介绍高效的锁应该具备的条件,最后将介绍两种常用的队列锁算法:CLH锁和MCS锁. 文中将用到一些原子变量的特性,你可以将原子变量看作加强版的volatile变量,具

Java并发编程:锁的释放

.title { text-align: center } .todo { font-family: monospace; color: red } .done { color: green } .tag { background-color: #eee; font-family: monospace; padding: 2px; font-size: 80%; font-weight: normal } .timestamp { color: #bebebe } .timestamp-kwd