ReentrantLock简单实现2
ReentrantLock:
/**
* ReentrantLock测试逻辑类
*/
public class MyService {
private Lock lock = new ReentrantLock();//获取锁对象 public void methodA() {
try {
lock.lock();
System.out.println("methodA:----begin" + Thread.currentThread().getName() + "----" + System.currentTimeMillis());
Thread.sleep(2000);
System.out.println("methodA:----end" + Thread.currentThread().getName() + "----" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
} public void methodB() {
try {
lock.lock();
System.out.println("methodB:----begin" + Thread.currentThread().getName() + "----" + System.currentTimeMillis());
Thread.sleep(2000);
System.out.println("methodB:----end" + Thread.currentThread().getName() + "----" + System.currentTimeMillis());
} catch (InterruptedException e) {
e.printStackTrace();
}finally {
lock.unlock();
}
}
}
/**
* 线程A
*/
public class ThreadA extends Thread { private MyService service; public ThreadA(MyService service) {
this.service = service;
} @Override
public void run() {
service.methodA();
}
}
/**
* 线程AA
*/
public class ThreadAA extends Thread { private MyService service; public ThreadAA(MyService service) {
this.service = service;
} @Override
public void run() {
service.methodA();
}
}
/**
* 线程B
*/
public class ThreadB extends Thread { private MyService service; public ThreadB(MyService service) {
this.service = service;
} @Override
public void run() {
service.methodB();
}
}
/**
* 线程BB
*/
public class ThreadBB extends Thread { private MyService service; public ThreadBB(MyService service) {
this.service = service;
} @Override
public void run() {
service.methodB();
}
}
/**
* 测试类
*/
public class Run { public static void main(String[] args) {
MyService service = new MyService(); ThreadA a = new ThreadA(service);
a.setName("A");
a.start();
ThreadAA aa = new ThreadAA(service);
aa.setName("AA");
aa.start(); ThreadB b = new ThreadB(service);
b.setName("B");
b.start();
ThreadBB bb = new ThreadBB(service);
bb.setName("BB");
bb.start();
}
}
运行结果如下:
ReentrantLock简单实现2的更多相关文章
- 通过ReentrantLock简单了解下并发包中的锁
ReentrantLock在进行实例化时,可以通过构造函数的参数选择是否使用公平锁FairSync或者非公平锁NonfairSync,两者的区别比较简单,如果是公平锁则新来的线程会先检测同步队列中是否 ...
- 利用ReentrantLock简单实现一个阻塞队列
借助juc里的ReentrantLock实现一个阻塞队列结构: package demo.concurrent.lock.queue; import java.util.concurrent.lock ...
- [温故]图解java多线程设计模式(一)
去年看完的<图解java多线程设计模式>,可惜当时没做笔记,导致后来忘了许多东西,打算再温习下这本书,顺便在这里记录一下~ 1.顺序执行.并行.并发 顺序执行:多个操作按照顺序依次执行. ...
- Java多线程——ReentrantReadWriteLock源码阅读
之前讲了<AQS源码阅读>和<ReentrantLock源码阅读>,本次将延续阅读下ReentrantReadWriteLock,建议没看过之前两篇文章的,先大概了解下,有些内 ...
- 聊聊高并发(十八)理解AtomicXXX.lazySet方法
看过java.util.concurrent.atomic包里面各个AtomicXXX类实现的同学应该见过lazySet方法.比方AtomicBoolean类的lazySet方法 public fin ...
- Synchronized与ReentrantLock区别总结(简单粗暴,一目了然)
这篇文章是关于这两个同步锁的简单总结比较,关于底层源码实现原理没有过多涉及,后面会有关于这两个同步锁的底层原理篇幅去介绍. 相似点:这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的 ...
- 什么是 AQS?简单说一下 ReentrantLock 的原理?
AQS 简介 java的内置锁一直都是备受争议的,在JDK 1.6之前,synchronized这个重量级锁其性能一直都是较为低下,虽然在1.6后,进行大量的锁优化策略,但是与Lock相比synchr ...
- 简单看看ReentrantLock
前面我们分析了AQS的基本原理,然后也试着基于AQS实现了一个可重入的锁了,现在我们再来看看官方的ReentrantLock锁,这个锁是可重入的独占锁,也就是说同时只有一个线程可以获取该锁,而且这个线 ...
- ReentrantLock可重入锁的理解和源码简单分析
import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; /** * @author ...
随机推荐
- 【VS2013编译DirectX Tutorials时遇到的错误】FXC : error X3501: 'main': entrypoint not found
修改于2015年9月6日: 去年写这篇解决方案的时候其实对着色器编程还一知半解,摸索了一个治标不治本的方法解决问题,结果被一个CSDN的博主原封不动抄了去,还打上个原创的标签= =,简直无语... 最 ...
- fabric 安装及简单使用 (centos6)
fabric 是一个python的库,fabric可以通过ssh批量管理服务器. 第一步安装依赖包 安装epel源 1 wget -O /etc/yum.repos.d/epel.repo http: ...
- Kali 2.0 安装后的初始配置
准备 1.VMware Workstation 2.kali-linux-2.0-amd64.iso 安装 手动安装 VMware 创建新的虚拟机,先不导入ISO文件,系统选择Debian 7.x 6 ...
- MySQL 各种引擎
数据库中的存储引擎其实是对使用了InnoDB.HEAP(也称为MEMORY).CSV.BLACKHOLE(黑洞引擎).ARCHIVE.PERFORMANCE_SCHEMA. Berkeley.Merg ...
- input 标签中的checkd 添加与取消
//获取是否选中 var isChecked = $('#cb').prop('checked'); //或 var isChecked = $('#cb').is(":checked&qu ...
- 橱窗布置(Flower)(动规)
橱窗布置(Flower) [问题描述] 假设以最美观的方式布置花店的橱窗,有F束花,每束花的品种都不一样,同时,至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,并从左到右, ...
- 编译使用CEF2623遇到的错误解决办法
https://cmake.org/download/win10的同学注意了按右键以管理员模式启动cmake-gui.exe在Where is the source code:里填上你解压的CEF3路 ...
- 手把手教你创建Azure ARM Template
Azure的ARM模式在中国已经落地了.在ARM模式中,通过ARM的Template批量的创建各种资源是与ASM模式的最大的区别之一.目前Azure ARM的Template数量已经越来越多,更多的客 ...
- 蓝桥杯 算法训练 ALGO-147 4-3水仙花数
算法训练 4-3水仙花数 时间限制:1.0s 内存限制:256.0MB 问题描述 打印所有100至999之间的水仙花数.所谓水仙花数是指满足其各位数字立方和为该数字本身的整数,例如 153=1 ...
- STM32 -- 硬件知识
一.网站资源 1.http://www.stmcu.com.cn/ 二.硬件 1.BOOT0 和 BOOT1 1)一般BOOT0和BOOT1跳线都跳到0(地): 只是在ISP下载的情况下,BOO ...