Android多线程之同步锁的使用
本文主要介绍了Android多线程之同步锁的使用,分享给大家,具体如下:
一、同步机制关键字synchronized
对于Java来说,最常用的同步机制就是synchronized关键字,他是一种基于语言的粗略锁,能够作用于对象、函数、class。每个对象都只有一个锁,谁能够拿到这个锁谁就有访问权限。当synchronized作用于函数时,实际上锁的也是对象,锁定的对象就是该函数所在类的对象。而synchronized作用于class时则是锁的这个Class类,并非具体对象。
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
上面演示了同步方法、同步块、同步class对象、同步静态方法。前2种锁的是对象,而后两种锁的是class对象。对于class对象来说,它的作用是防止多个线程同时访问添加了synchronized锁的代码块,而synchronized作用于引用对象是防止其他线程访问同一个对象中synchronized代码块或者函数。
二、显示锁———-ReentrankLock和Condition
ReentrankLock 和内置锁synchronized相比,实现了相同的语义,但是更具有更高的灵活性。
(1)获得和释放的灵活性。
(2)轮训锁和定时锁。
(3)公平性。
基本操作:
lock(): 获取锁
tryLock(): 尝试获取锁
tryLock(long timeout,TimeUnit unit): 尝试获取锁,如果到了指定的时间还获取不到,那么超时。
unlock(): 释放锁
newCondition(): 获取锁的 Condition
使用ReentrantLock的一般组合是 lock、tryLock、与unLock成对出现,需要注意的是,千万不要忘记调用unlock来释放锁,负责可能引发死锁的问题。ReentrantLock的常用形式如下所示:
?
1 2 3 4 5 6 7 8 9 10 11 12 |
|
需要注意的是,lock必须在finally开中释放,否则,如果受保护的代码抛出异常,锁就可能永远得不到释放!!
ReentrantLock类中还有一个重要的函数newCondition(),该函数用户获取Lock()上的一个条件,也就是说Condition与Lock绑定。Condition用于实现线程间的通信,他是为了解决Object.wait(),nofity(),nofityAll() 难以使用的问题。
Condition的方法如下:
await() : 线程等待
await(int time,TimeUnit unit) 线程等待特定的时间,超过的时间则为超时。
signal() 随机唤醒某个等待线程
signal() 唤醒所有等待中的线程
示例代码:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
|
执行结果:
3
24
还没有数据,等待
三、信号量 Semaphore
Semaphore是一个计数信号量,它的本质是一个“共享锁”。信号量维护了一个信号量许可集,线程可以通过调用acquire()来获取信号量的许可。当信号量中有可用的许可时,线程能获取该许可;否则线程必须等待,直到可用的许可为止。线程可以通过release()来释放它所持有的信号量许可。
示例:
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
以上就是本文的全部内容,希望对大家的学习有所帮助
Android多线程之同步锁的使用相关推荐
- Java基础知识多线程,同步锁
多线程 /*多线程: 多任务执行,多路径执行优点:提高性能提高效率进程与线程之间的区别:进程 : 系统中的程序,一个进程之间可以包含1~n个线程,系统中资源分配的最小单位,每个进程都有自己的代码与数据 ...
- Python 的多线程(1) - 同步锁
前言 : 最近对Python赶感兴趣了, 原因是公司需求对接第三方的业务比较多,所以寻找测试资源很麻烦,每天都在各种做重复的工作. 所以就想到了用python写个小脚本来找, 为什么是Python,主 ...
- python 多线程同步锁之实现停车场业务(2)
这边文章是实现同时有车辆出去,又有车辆进来的业务逻辑,和现实的差不多 真正要和现实中的一样,只需要更改休眠时间就可,通过调节修改时间,动态实现 之前的代码 python 多线程同步锁之实现停车场业务( ...
- Java多线程系列---“JUC锁”01之 框架
本章,我们介绍锁的架构:后面的章节将会对它们逐个进行分析介绍.目录如下: 01. Java多线程系列--"JUC锁"01之 框架 02. Java多线程系列--"JUC锁 ...
- Android 多线程保证操作同步(同步锁的俩种)
今天来介绍一下android中多线程同步的机制 首先我们来创建几个多线程,模仿一下文件读写的操作. private void writeLog() {for (int i = 0; i < 3; ...
- android 多线程实现方式、并发与同步学习总结
参考地址:http://blog.csdn.net/qq_30379689/article/details/72550701#面向对象和面向过程的区别 http://blog.csdn.net/csd ...
- Linux多线程的同步-----信号量和互斥锁
前面两篇给基本概念讲过了,大家有兴趣的可以去看一下: Linux多线程_神厨小福贵!的博客-CSDN博客进程和线程的区别有哪些呢?进程是资源分配的最小单位,线程是CPU调度的最小单位进程有自己的独立地 ...
- java同步锁售票_Java基础学习笔记: 多线程,线程池,同步锁(Lock,synchronized )(Thread类,ExecutorService ,Future类)(卖火车票案例)...
学习多线程之前,我们先要了解几个关于多线程有关的概念. 进程:进程指正在运行的程序.确切的来说,当一个程序进入内存运行,即变成一个进程,进程是处于运行过程中的程序,并且具有一定独立功能. 线程:线程是 ...
- python—多线程数据混乱问题解决之同步锁
一.同步 问题产生的原因就是没有控制多个线程对同一资源的访问,对数据造成破坏,使得线程运行的结果不可预期.这种现象称为"线程不安全"". 同步:就是协同步调,按预定的先后 ...
最新文章
- C++ Stack Queue priority_queue
- 利用Python在Jetson TX2上抓取和显示摄像头影像
- Android 手电筒源码
- mysql查询唯一单词_MySql从表中获取唯一单词列表,其中字段中的值用逗号分隔
- Unicode Tips
- State and Notifications Broker
- 数字后端基本概念介绍<IO Cluster>
- centos 截图命令 screenshot
- (已解决)Mon Apr 08 14:02:29 CST 2019 WARN: Establishing SSL connection without server's
- python -- 连接 orclae cx_Oracle的使用
- 2021下半年 自编译最新稳定版 裴讯 Phicomm K2 Openwrt 固件
- Kettle下载与安装教程【保姆版】
- 任务管理器怎么重启计算机,用任务管理器解决软件假死无需重启电脑
- bzoj4816[SDOI2017]数字表格
- 我的世界java版如何加入hypixel_我的世界hypixel服务器怎么组队 hypixel服务器组队方法介绍...
- 在线教育平台五大商业模式
- 关于halcon深度图转灰度图
- 双极结型晶体管——三极管理解
- python 儿童 游戏_python程序:两个小孩玩剪刀石头布游戏,一人十分,赢一次得一分,输一次减一分,平手不扣分,当没...
- 微信小程序-图片宽高设置
热门文章
- UE4学习-添加机关并添加代码控制
- 本地tomcat 配置环境变量
- linux cgi命令,Linux之cgi实现系统主机监控
- 大学生拍照搜题_大学生心理健康教育知识,请问:这个考试有没有找答案软件?...
- jquery去掉数组最后一个元素_从数组中删除最后一项
- python在mac上_在Mac上Python多版本切换
- wpf开发仿真3d软件_web 3d 与仿真
- python 类成员变量是否存在_python中类变量与成员变量的使用注意点总结
- jbl调音软件_[马自达] 佛山马自达昂克赛拉改装美国JBL汽车音响
- 计算机发展最新趋势素材,计算机方面论文范文素材,与关于计算机科学与技术的趋势探究相关论文网...