android 锁的使用教程,Android 中 synchronized的基本使用

应用情况:多线程同时访问,并且代码块不能被同时执行的时候使用

使用synchronized用来修饰方法

基本执行过程:当多个线程同时访问被synchronized修饰的方法的时候,有且只有一个线程可以访问,当一个线程在访问的时候,其他线程只能等待。当一个线程访问完毕后下一个线程才可以访问。

原理解析:当方法被synchronized修饰后,如果想要执行该方法就必须获得相应的锁。

锁的说明:每个类又且仅有一个锁(针对静态方法),每个类的示例也是有且仅有一个锁。

当多个线程在同时访问同一个方法的时候,执行该方法就必须获得相应的锁,同时锁只有一个,所以只能有一个线程可以获得锁,所以只有一个线程可以执行,当方法执行完毕,线程会释放锁,其他线程获取该锁,执行方法。

进阶说明:由于每个类只有一个锁,所以当一个类中又多个方法被synchronized修饰的时候,在同一时间内只有一个方法可以获得锁,所以只有一个方法可以执行。

原理说明进行测试验证:(生物实验有个唯一变量原则,本次也采用这个原则)

验证多线程同时访问被synchronized修饰的方法,方法顺序执行结果:

1.当多线程调用方法的时候,方法没有被synchronized修饰的时候的执行结果

35af333fdde4

线程启动

35af333fdde4

调用方法

35af333fdde4

打印结果

根据打印结果可以看出两个线程调用的方法的时候,方法会被同时执行。

当我们仅仅为shwoDO()添加一个修饰关键字synchronized的时候,方法就会被顺序调用。结果如下:

35af333fdde4

更改后的方法

35af333fdde4

打印结果

使用synchronized用来修饰代码块

基本说明:当synchronized在修饰代码块的时候需要一个自定义锁,当在多线程访问,代码块的时候,只要获得自定义锁就可以执行。

自定义锁:可以是一个类,也可以是一个实例(可以是Objcet的子类,也可以是当前类自己(this)),当具有相同自定锁的时候,代码块会顺去执行,当锁不同的时候互相不影响。

每个类又且仅有一个锁(针对静态方法),每个类的示例也是有且仅有一个锁。

基本书写格式:synchronized(自定义锁){同步执行代码块}

测试将showDO()方法个能改为如图,代码块内部内容同样会同步执行。

35af333fdde4

更改后方法

35af333fdde4

打印结果

总结说明:synchronized具有有两种使用方法,第一种是修饰方法,第二种修饰代码块。

无论那中方法,被修饰的内容都会同步执行。这也是synchronized的作用。

关于两种方法的使用:对于修饰方法常常会发生不必要的代码块被同步,同时锁不可以选择,但是使用                   简单。对于修饰代码块方法用起来更精确,需要自己制定锁,用起来稍微麻烦一点。

若有错误之初,请给予指示,谢谢~~~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值