【多线程1】:synchronized关键字(同步锁、可重入锁、非公平锁)

首先,什么是锁,为什么要用这个玩意儿?
掌握Java中锁是Java多线程编程中绕不开的知识,只有知道理解Java各种锁才能在编码过程中灵活运用,写出更高效的多线程程序。而理解掌握锁的第一步,可从宏观上对比理解一下各种锁概念。


synchronized同步锁:

public class UserInfoService {

	/** 普通代码 **/
	public String getUserInfo(String id) {
		// TODO
		Sysotem.out.println("--------------普通代码(无锁)--------------");
		return null;
	}

	// 同步锁(锁方法体)
	public synchronized String getUserInfo(String id) {
		// TODO
		Sysotem.out.println("--------------同步锁(锁方法体)--------------");
		return null;
	}

	// 同步锁(锁代码块)
	public String getUserInfo(String id) {
		synchronized (this) {
			// TODO
			Sysotem.out.println("--------------同步锁(锁代码块)--------------");
		}
		return null;
	}

}	

synchronized可重入锁:
可重入锁又名递归锁,是指在同一个线程在外层方法获取锁的时候,在进入内层方法会自动获取锁。说的有点抽象,下面会有一个代码的示例。
对于Java ReentrantLock而言, 他的名字就可以看出是一个可重入锁,其名字是Re entrant Lock重新进入锁。
对于Synchronized而言,也是一个可重入锁。可重入锁的一个好处是可一定程度避免死锁。

synchronized void setA() throws Exception{
	Thread.sleep(1000);
	setB();
}

synchronized void setB() throws Exception{
	Thread.sleep(1000);
}

上面的代码就是一个可重入锁的一个特点,如果不是可重入锁的话,setB可能不会被当前线程执行,可能造成死锁。


























注:以上内容仅提供参考和交流,请勿用于商业用途,如有侵权联系本人删除!


持续更新中…

如有对思路不清晰或有更好的解决思路,欢迎与本人交流,QQ群:273557553,个人微信:
你遇到的问题是小编创作灵感的来源!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值