Java关键字:synchronized

1、synchronized关键字简介

synchronized直译成中文就是使同步的意思,用synchronized修饰的方法也被我们称作同步方法,常被用来解决多线程情况下的线程安全问题。说到这个同步,其实刚开始学计算机时我也很费解,同步总被我认为是同步执行,但是使用的时候其实不就是让任务排队执行嘛,没错计算机中的名词就是这么的让人迷惑和费解。其实,这个同步说的是使内容同步的意思,并不是让任务来同时执行。相对应的名词什么线程同步,数据库同步等等,可以查一查究竟是什么意思计算机中名词的魅力就是使人望文不知意。
synchronized其实是一种锁机制,简单理解就是我用synchronized修饰的内容就是规定了该内容只能同时让一个人看。举个栗子,就像一个算命先生他有一个规矩只能同时给一个人算命,一天a和b两个人都来算命,a先拜访算命先生了,那么算命先生就在门口挂个牌满客,那么b就只能在门口等,当a完事了出门,算命先生就把牌子换成空,这时候b才能去拜访。

2、synchronized修饰一般方法

public synchronized void test1() {
	//执行了test1操作。。。
}

当synchronized用来修饰一般方法时,锁是针对调用对象的(可以这样理解synchronized (this)),也就是说多线程中同一个对象来执行test1操作只能串行执行。

3、synchronized修饰静态方法

public synchronized static void test2(){
	//执行了test2操作.。。
}

当synchronized用来修饰静态方法时,锁针对的是类的所有对象(可以这样理解synchronized (this.getClass())),比如上图中的test2方法是被定义在demo1这个类中,那么多线程环境下demo1这个类所有的对象在执行test2操作时都只能串行执行。

4、synchronized修饰代码块

private Object obj1 = new Object();

public void test3(){
	//一些操作。。。
	synchronized (obj1) {
		//某些危险操作
	}
	//另一些操作
}

当synchronized用来修饰代码段的时候,锁是针对括号中传入的对象的,多线程环境中调用test3方法时括号中对象相同的调用者在执行test3中危险操作的时候将只能串行执行。像这种同步代码块相比于同步方法具有更细化的锁的粒度,可以达到更高的资源利用率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值