20170206-多线程同步volatile与ConditionVariable

多线程同步

201612

  • volatile

对于volatile修饰的变量,jvm虚拟机只是保证从主内存加载到线程工作内存的值是最新的。

例如假如线程1和线程2同时在进行read,load操作中,发现主内存中count的值都是5,那么都会加载这个最新的值。在线程1对count进行修改之后,会write到主内存中,主内存中的count变量就会变为6,线程2由于已经进行read,load操作,在进行运算之后,也会更新主内存count的变量值为6,导致两个线程即使用volatile关键字修改之后,还是会存在并发的情况。

  • ConditionVariable

Android封装的锁对象,以它本身为同步对象,所以ConditionVariable的对象,不要调用wait()和notify(),而是采用如下的方法:

构造函数:

  • 1.无参的,默认创建时close状态
  • 2.带参数boolean,参数代表初始状态,true是open,false是close。

open(): 将状态设置为打开,释放所有blocked的线程,相当于notifyAll()。在此函数之后调用block()是无效的,除非调用close()函数。

block(): block当前线程直至状态打开(即调用open()),相当于wait()。如果此时是打开状态该函数不生效,立即返回。

close(): 将状态设置为关闭,调用后任何调用block()的线程将会block直至被调用了open()。
也就是说,如果想block()某些操作,那就先close(),block()部分处理完之后再open()。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 43,015评论 11 349
  • ———————————————回答好下面的足够了---------------------------------...
    恒爱DE问候阅读 1,855评论 0 4
  • 胖宝宝的自尊心,有时候需要一些外在的刺激才能激发强大的动力。就比如说减肥这件小事吧,平时没想到减肥,可一旦自尊心受...
    SI玲阅读 1,043评论 0 0
  • 1. HTTPS 证书认证(导入相关证书) 2. 发送请求 [[AFNetAPIClient sharedJson...
    蒋大为阅读 455评论 0 1
  • 一、 熟悉我的人应该知道,我曾经有一段时间超迷罗振宇,不仅罗辑思维的视频期期不落,之前还为他充值过信仰,办了会员,...
    发疯的然然阅读 1,342评论 1 4

友情链接更多精彩内容