Lock和Synchronized的区别

Lock实现了与synchronized相同的互斥性和内存可见性。

synchronized代码简单,并且与处理异常操作实现了很好的交互。 synchronized是可重入锁。

Lock提供了一种无条件的,可轮询的,定时的以及可中断的锁获取操作,所有加锁和释放锁都是显式的。

ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性。 并且提供了可重入的加锁语义。它还为锁的不可用问题提供了更高的灵活性。

ReentrantLock提供了更好的活跃性,性能,公平性。

synchronized代码整洁简单

ReentrantLock必须在finally中释放。

ReentrantLock与AbstractQueuedSynchronizer  http://www.importnew.com/24006.html

https://blog.csdn.net/yanyan19880509/article/details/52345422/

http://ifeve.com/introduce-abstractqueuedsynchronizer/

https://blog.csdn.net/tb3039450/article/details/69056169

AbstractQueuedSynchronizer

1:构建同步器类

2:管理同步器中的状态(基于状态的同步器)

3:维护一个资源队列,资源是线程。

AbstractQueuedSynchronizer 用来管理同步器的状态。可以用它构建同步器(ReentrantLock等)和其它同步框架。

AbstractQueuedSynchronizer给定一个状态,然后将其封装到锁的子类里面,可以为自定义锁设置一些自定义内容,比如最大访问线程数。

AQS维护的队列是当前等待资源的队列。

每个Condition维护着一个队列,该队列的作用是维护一个等待singal信号的队列。

semphore构建边界队列时,可以使用。

ExecutorService 异步框架。

创建线程池的两种方式:

1:根据线程工厂创建线程池,可以创建任意多的线程。

        ThreadFactory threadFactory=Executors.defaultThreadFactory();
ExecutorService threadPoolExecutor = Executors.newCachedThreadPool(threadFactory);

2:指定线程池的大小

ExecutorService threadPoolExecutor = Executors.newScheduledThreadPool(Runtime.getRuntime().availableProcessors());
  

AbstractQueuedSynchronizer,Lock,Synchronized的更多相关文章

  1. [Java] [Lock] [Synchronized VS ReentrantLock]

    Overview java编写多线程程序时,为了保证线程安全,需要对数据进行同步,经常用到的两种同步方式就是synchronized和重入锁ReentrantLock. 相似点 都是加锁方式 都是阻塞 ...

  2. 两个线程与stringbuffer和stringbuiler以及lock synchronized线程测试

    import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public clas ...

  3. 第41天学习打卡(死锁 Lock synchronized与Lock的对比 线程协作 使用线程池)

    死锁 多个线程各自占有一些共享资源,并且互相等待其他线程占有的资源才能运行,而导致两个或者多个线程都在等待对方释放资源,都停止执行的情形.某一个同步块同时拥有"两个以上对象的锁"时 ...

  4. Lock与synchronized的区别(浅谈)

    Lock是一个接口 synchronized是一个关键字 Lock用法:                                 synchronized用法:    lock.lock()  ...

  5. Java并发编程:synchronized、Lock、ReentrantLock以及ReadWriteLock的那些事儿

    目录 前言 synchronized用法 修饰方法 修饰实例方法 修饰静态方法 同步代码块 引出Lock Lock用法 子类:ReentrantLock 读写分离锁:ReadWriteLock Loc ...

  6. (转)synchronized和lock的区别

    背景:最近在准备java基础知识,对于可重入锁一直没有个清晰的认识,有必要对这块知识进行总结. 1 . 什么是可重入锁 锁的概念就不用多解释了,当某个线程A已经持有了一个锁,当线程B尝试进入被这个锁保 ...

  7. Synchronized和Lock, 以及自旋锁 Spin Lock, Ticket Spin Lock, MCS Spin Lock, CLH Spin Lock

    Synchronized和Lock synchronized是一个关键字, Lock是一个接口, 对应有多种实现. 使用synchronized进行同步和使用Lock进行同步的区别 使用synchro ...

  8. Java性能 -- Lock优化

    Lock / synchronized Lock锁的基本操作是通过乐观锁实现的,由于Lock锁也会在阻塞时被挂起,依然属于悲观锁   synchronized Lock 实现方式 JVM层实现 Jav ...

  9. java 中关于synchronized的通常用法

    package j2se.thread.test; /*** * synchronized(class)很特别,它会让另一个线程在任何需要获取class做为monitor的地方等待. * class与 ...

随机推荐

  1. 怎样用Javascript定义一个类

    其实Javascript中没有类这个定义,但是有类这个概念.很多人都写过这样的代码,对,没错,就是如下代码,清晰的不能再清晰了,就是一个关键字 function,然后定义一个方法名,方法名后紧跟一对括 ...

  2. c++ 类数据成员的定义、声明

    C++为类中提供类成员的初始化列表类对象的构造顺序是这样的:1.分配内存,调用构造函数时,隐式/显示的初始化各数据成员2.进入构造函数后在构造函数中执行一般计算  1.类里面的任何成员变量在定义时是不 ...

  3. tiny4412 linux+qtopia nfs网络文件系统的挂载

    1,首先确定uboot启动内核的bootargs参数 Linux-CommandLine = root=/dev/nfs nfsroot=192.168.1.131:/home/tiny4412/ro ...

  4. scala函数进阶篇

    1.求值策略scala里有两种求值策略Call By Value -先对函数实参求值,在函数体中用这个求出的参数值.Call By Name -先不对函数实参求值,而是函数实参每次在函数体内被用到时都 ...

  5. join()函数的用法【python】

    转自:http://www.jb51.net/article/63598.htm

  6. Linux hwclock 命令

    hwclock 即 Hardware Clock 硬件时钟,该命令用于查询或设置硬件时钟:硬件时钟是指主机板上的时钟设备,也就是通常可在 BIOS 画面设定的时钟:系统时钟是指 Kernel 中的时钟 ...

  7. OAuth2认证有一定的了解

    转到分享界面后,进行OAuth2认证: 以新浪为例: 第一步.WebView加载界面,传递参数 使用WebView加载登陆网页,通过Get方法传递三个参数:应用的appkey.回调地址和展示方式dis ...

  8. C语言简介(转自菜鸟教程)

    C 简介 C 语言是一种通用的高级语言,最初是由丹尼斯·里奇在贝尔实验室为开发 UNIX 操作系统而设计的.C 语言最开始是于 1972 年在 DEC PDP-11 计算机上被首次实现. 在 1978 ...

  9. C++的virtual详解

    类的多态特性是支持面向对象的语言最主要的特性,有过非面向对象语言开发经历的人,通常对这一章节的内容会觉得不习惯,因为很多人错误的认为,支持类的封装的语言就是支持面向对象的,其实不然,Visual BA ...

  10. 为什么setinterval和settimeout越点击越快以及响应的解决办法

    setinterval大家都很了解,但是如果时间长的话,误差也会越来越大,所以我习惯上使用settimeout的递归,闲来没事,写了一个定时器的递归 <!DOCTYPE html> < ...