博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
猿来绘Java-37-ReentrantLock解决线程安全问题
阅读量:2096 次
发布时间:2019-04-29

本文共 1206 字,大约阅读时间需要 4 分钟。

中介绍了使用同步代码块、同步方法的方式解决线程安全问题,在JDK5.0之后,新增了使用ReentrantLock方式。

 

示例代码

//SynchronizedLockTest.javapackage com.ylaihui.thread;import java.util.concurrent.locks.ReentrantLock;class ProcPicture implements Runnable{    private static int num = 100;    private ReentrantLock lock = new ReentrantLock();    @Override    public void run() {        while(true) {            try{                lock.lock();                if (num > 0) {                    System.out.println(Thread.currentThread().getName() + ":" + num);                    num--;                } else                    break;            }finally {                // 保证了释放锁一定能执行                lock.unlock();            }        }    }}public class SynchronizedLockTest {    public static void main(String[] args) {        ProcPicture p = new ProcPicture();        Thread t1 = new Thread(p);        Thread t2 = new Thread(p);        Thread t3 = new Thread(p);        t1.start();        t2.start();        t3.start();    }}

 

总结:

1. synchronized 与 Lock的异同

 

相同:二者都可以解决线程安全问题

不同:synchronized机制在执行完相应的同步代码以后,自动的释放同步监视器,Lock需要手动的启动同步(lock()),同时结束同步也需要手动的实现(unlock())

 

2. 开发中我们如何选择使用哪种方式解决线程安全问题呢?

建议:优先使用灵活的

 

优先使用Lock的方式,其次同步代码块(已经进入了方法体,分配了相应资源),再次同步方法(在方法体之外)

 

 

 

转载地址:http://qtuhf.baihongyu.com/

你可能感兴趣的文章
win10安装软件 打开时报错 找不到 msvcp120.dll
查看>>
PHPunit+Xdebug代码覆盖率以及遇到的问题汇总
查看>>
PHPUnit安装及使用
查看>>
PHP项目用xhprof性能分析(安装及应用实例)
查看>>
composer安装YII
查看>>
Sublime text3快捷键演示
查看>>
sublime text3 快捷键修改
查看>>
关于PHP几点建议
查看>>
硬盘的接口、协议
查看>>
VLAN与子网划分区别
查看>>
Cisco Packet Tracer教程
查看>>
02. 交换机的基本配置和管理
查看>>
03. 交换机的Telnet远程登陆配置
查看>>
微信小程序-调用-腾讯视频-解决方案
查看>>
phpStudy安装yaf扩展
查看>>
密码 加密 加盐 常用操作记录
查看>>
TP 分页后,调用指定页。
查看>>
Oracle数据库中的(+)连接
查看>>
java-oracle中几十个实用的PL/SQL
查看>>
PLSQL常用方法汇总
查看>>