[Java笔记]多线程(三)——同步锁(Lock)和死锁

本文介绍了Java中多线程环境下Lock(以ReentrantLock为例)的使用及其相比synchronized的优势。同时,文章探讨了死锁的概念,分析了一个导致死锁的示例,强调在多线程编程中预防死锁的重要性。
摘要由CSDN通过智能技术生成
一、出现的契机

        Lock提供了比synchronized方法和synchronized代码块更广泛的锁定操作,Lock使用方式更加灵活,它拥有synchronized方法和synchronized代码块所没有的其它功能,包括非块结构的tryLock()方法、试图获取可中断锁的lockInterruptibly()方法、还有获取超时失效的tryLock(long, TimeUnit)方法。

二、常用锁ReentrantLock(可重入锁)

        使用该锁可以显式地加锁、释放锁。ReentrantLock代码格式通常如下:

class X{
	//定义锁对象
	private final ReentrantLock lock = new ReentrantLock();
	//定义需要保证线程安全的方法
	public void m(){
		//加锁
		lock.lock();
		try{
			//需要保证线程安全的代码
			//... 方法体
		}
		//使用finnally块来保证释放锁
		finally{
			lock.unlock();
		}
	}
}

        Lock与同步方法相似,使用Lock 时显式使用Lock 对象作为同步锁,而使用同步方法时系统隐式使用当前对象作为同步监视器。

三、死锁

        两个线程相互等待对方释放同步监视器是就会发生死锁。Java 虚拟机没有检测,出现死锁不会采取措施来处理死锁,所以在多线程编程时应采取措施避免死锁出现。

class A
{
	public synchronized void foo( B b )
	{
		System.out.println("当前线程名: " + Thread.currentThr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值