java多线程-Lock
大纲:
- Lock接口
- synchronized&Lock异同
一、Lock
public interface Lock {
void lock();
void lockInterruptibly() throws InterruptedException;
boolean tryLock();
boolean tryLock(long time, TimeUnit unit) throws InterruptedException;
void unlock();
Condition newCondition();
}
- lock()获取锁。
- lockInterruptibly()可打断的获取锁方法,仅可打断等待锁的线程。
- tryLock()获取锁并返回结果,得到锁的线程返回true,没有拿到锁的线程不再等待并返回false。
- tryLock(time)带参数函数,可以传入一个时间,在这个时间内获得锁的线程返回true,没有获得锁返回false,且在这个时间内等在锁的线程可以被打断。
- unlock()释放锁。
- newCondition 创建一个场景(见下章)。
例:
ReentrantLock为Lock接口唯一实现类
class Met {
Lock lock = new ReentrantLock();
public void action() {
String name = Thread.currentThread().getName()+":";
try {
lock.lockInterruptibly();
try {
for (int i = 0; i < 1000; i++) {
System.out.println(name+i);
}
}finally {
System.out.println(name+"unlock");
lock.unlock();
}
} catch (InterruptedException e) {
System.out.println(name+"interrupted");
}
}
}
public class MyRunnable implements Runnable {
Met met;
MyRunnable(Met met){
this.met = met;
}
@Override
public void run() {
met.action(Thread.currentThread());
}
}
class TestLock {
public static void main(String[] args) {
Met met = new Met();
MyRunnable myRunnable = new MyRunnable(met);
Thread thread0 = new Thread(myRunnable);
Thread thread1 = new Thread(myRunnable);
thread0.start();
thread1.start();
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
二、synchronized&Lock异同
- synchronized代码块内发生异常,锁会自动释放、lock需要在finally中手动释放。
- synchronized无法锁的获取情况。
- synchronized无法设置超时。
- synchronized无法中断等待获取锁的线程。
- synchronized无法设置是否公平锁,lock和synchronized默认是非公平锁。
- lock和synchronized都是排他、重入锁。
java多线程-Lock的更多相关文章
- java多线程Lock接口简介使用与synchronized对比 多线程下篇(三)
前面的介绍中,对于显式锁的概念进行了简单介绍 显式锁的概念,是基于JDK层面的实现,是接口,通过这个接口可以实现同步访问 而不同于synchronized关键字,他是Java的内置特性,是基于JVM的 ...
- Java多线程Lock
JDK5以后为代码的同步提供了更加灵活的Lock+Condition模式,并且一个Lock可以绑定多个Condition对象 1.把原来的使用synchronized修饰或者封装的代码块用lock.l ...
- Java多线程——Lock&Condition
Lock比传统线程模型中的synchronized方式更加面向对象,与生活中的锁类似,锁本身也应该是一个对象.两个线程执行的代码片段要实现同步互斥的效果,它们必须用同一个Lock对象. package ...
- java多线程lock的使用
看代码: package com.ming.thread.reentrantlock; import java.util.concurrent.locks.Lock; import java.util ...
- 玩转Java多线程(Lock.Condition的正确使用姿势)
转载请标明博客的地址 本人博客和github账号,如果对你有帮助请在本人github项目AioSocket上点个star,激励作者对社区贡献 个人博客:https://www.cnblogs.com/ ...
- Java多线程编程核心技术--Lock的使用(一)
使用ReentrantLock类 在Java多线程中,可以使用synchronized关键字来实现线程之间的同步互斥,但在JDK1.5中新增加了ReentrantLock类也能达到同样的效果,并且在扩 ...
- Java多线程(五) Lock接口,ReentranctLock,ReentrantReadWriteLock
在JDK5里面,提供了一个Lock接口.该接口通过底层框架的形式为设计更面向对象.可更加细粒度控制线程代码.更灵活控制线程通信提供了基础.实现Lock接口且使用得比较多的是可重入锁(Reentrant ...
- java多线程系列(四)---Lock的使用
Lock的使用 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理 ...
- java多线程(五)-访问共享资源以及加锁机制(synchronized,lock,voliate)
对于单线程的顺序编程而言,每次只做一件事情,其享有的资源不会产生什么冲突,但是对于多线程编程,这就是一个重要问题了,比如打印机的打印工作,如果两个线程都同时进行打印工作,那这就会产生混乱了.再比如说, ...
随机推荐
- Xcode弱网测试工具
Network Link Conditioner Network Link Conditioner工具是Mac下提供的一个弱网测试工具. 安装Network Link Conditioner Xcod ...
- javax.servlet.jsp.PageContext cannot be resolved to a type
<dependency> <groupId>javax.servlet</groupId> <artifactId>jsp-api</artifa ...
- iOS play video
iOS: How to use MPMoviePlayerController up vote6down votefavorite 3 I've created a blank project (iO ...
- (转)Asp.Net生命周期系列一
原文地址:http://www.cnblogs.com/skm-blog/archive/2013/07/07/3176713.html Asp.Net生命周期对于初级甚至中级程序员来说,一直都是一个 ...
- MySQL性能调优与架构设计——第5章 备份与恢复
第5章 备份与恢复 前言 数据库的备份与恢复一直都是 DBA 工作中最为重要的部分之一,也是基本工作之一.任何正式环境的数据库都必须有完整的备份计划和恢复测试,本章内容将主要介绍 MySQL数据库的备 ...
- Eclipse中连接数据库错误:com.microsoft.sqlserver.jdbc.SQLServerException: 之类的错误
原创 错误:org.apache.jasper.JasperException: Unable to compile class for JSP 原因是页面指令中 import="java. ...
- MessageBox.Show() 多重用法
MessageBox.Show (String) 显示具有指定文本的消息框. 由 .NET Compact Framework 支持. MessageBox.Show (IWin32Window, S ...
- Castle Windsor 注册组件
1.逐个注册组件即对每个接口通过代码指定其实现类,代码: container.Register( Component.For<IMyService>() //接口 .Implemented ...
- EIP权限工作流平台-升级说明(2018-12-04)
表单生成器,文本框新增验证(默认验证及正则表达式) 列表查询支持复杂查询,支持文本框,下拉框,时间查询
- Windows实用功能
查看程序crash日志:"Computer Management"-"System Tools"-"Event Viewer"-" ...