美文网首页
20170206-多线程同步volatile与Condition

20170206-多线程同步volatile与Condition

作者: 好奇的小刺猬 | 来源:发表于2017-12-22 21:05 被阅读21次

    多线程同步

    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()。

    相关文章

      网友评论

          本文标题:20170206-多线程同步volatile与Condition

          本文链接:https://www.haomeiwen.com/subject/dygxgxtx.html