JUC-007-同步锁Lock
2018-01-30 12:09
239 查看
解决多线程安全问题的方法
同步代码块同步方法
同步锁
显示锁 Lock
在 Java 5.0 之前,协调共享对象的访问时可以使用的机制只有 synchronized 和 volatile 。Java 5.0 后增加了一些新的机制,但并不是一种替代内置锁的方法,而是当内置锁不适用时,作为一种可选择的高级功能。ReentrantLock 实现了 Lock 接口,并提供了与synchronized 相同的互斥性和内存可见性。但相较于synchronized 提供了更高的处理锁的灵活性。
测试代码
LockTest.javapackage juc.lock; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class LockTest { /* * 解决多线程安全问题的方法: * 隐式锁 * 1.同步代码块(synchronized) * 2.同步方法(synchronized) * 显示锁 * 3.同步锁(Lock) */ /* * Lock显示锁: * 步骤: * 1.新建对象ReentrantLock * 2.通过Lock方法显示上锁,通过unlock方法进行释放锁 */ public static void main(String[] args) { ThreadDemo threadDemo = new ThreadDemo(100); for (int i = 0; i < 5; i++) { new Thread(threadDemo).start(); } } } class ThreadDemo implements Runnable { private int ticket; // 同步显示锁Lock private Lock lock = new ReentrantLock(); public ThreadDemo(int ticket) { this.ticket = ticket; } @Override public void run() { lock.lock(); // 上锁 while(ticket > 0) { try { Thread.sleep(10); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + ": " + ticket--); } lock.unlock(); // 释放锁 } }
其它
源码下载:关注下方微信公众号, 回复: JUC.code
欢迎加入交流群:451826376
更多信息:www.itcourse.top
相关文章推荐
- JUC之ReentrantReadWriteLock(JDK1.8源码)
- JUC.Lock(锁机制)学习笔记[附详细源码解析]
- !!! c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex(ZT)
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- c# 线程同步: 详解lock,monitor,同步事件和等待句柄以及mutex(ZT)
- 比较ReentrantLock和synchronized和信号量Semaphore实现的同步性能
- [内核同步]自旋锁spin_lock、spin_lock_irq 和 spin_lock_irqsave 分析
- java 同步 Synchonized 锁 ReentrantLock 原理 源码
- 使用lock同步线程,建立了10个线程实例
- Java线程(八):锁对象Lock-同步问题更完美的处理方式
- java 同步synchronized,lock(obj) ,读写锁
- Java 并发及同步相关 Synchronized ReentrantLock
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
- 各种同步方法性能比较(synchronized,ReentrantLock,Atomic)
- 详解JUC之锁——Lock与AQS(02)
- 含PLL的lock信号的异步复位同步释放
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
- 锁对象Lock-同步问题更完美的处理方法
- Java线程(七):JUC包同步集合及JUC总结练习