zoukankan      html  css  js  c++  java
  • synchronized 和 lock 的区别

    先谈sleep与wait:
    sleep()方法导致了程序暂停执行指定的时间,让出cpu给其他线程,但是他的监控状态依然保持者,当指定的时间到了又会自动恢复运 行状态。另外,在调用sleep()方法的过程中,线程不会释放对象锁。

    而当调用wait()方法的时候,线程会放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象调用notify()方法后本线程才进入对 象锁定池准备获取对象锁进入运行状态。

    http://www.cnblogs.com/hongten/p/hongten_java_sleep_wait.html
    这个样例,两个线程都使用同一个锁(TestD.class),就算Thread2执行了notify()方法后(这部分还未释放的,只是唤醒上面的wait)再对自身执行sleep()可以看到Thread1没有进行下去,而是等sleep()完了以后继续执行Thread2后续代码。可以知道sleep方法没有释放锁。


    引用:https://www.cnblogs.com/dolphin0520/p/3923167.html

    synchronized的缺陷:
    如果这个获取锁的线程由于要等待IO或者其他原因(比如调用sleep方法)被阻塞了,但是又没有释放锁,其他线程便只能干巴巴地等待

    总之:
    synchronized是java中的一个关键字,Lock是一个类,通过这个类可以实现同步访问(java.util.concurrent.locks)。

    lock可以让等待锁的线程响应中断(try,catch,finally),而synchronized却不行,使用synchronized时,等待的线程会一直等待下去,不能够响应中断。

    synchronized方法或者代码块执行完后系统会自动让线程释放对锁的占用,而Lock则必须要用户去手动释放锁。

    我好菜呀
  • 相关阅读:
    CDN 机制
    canvas绘制旋转图形
    前端资源网站
    css中的em用法
    响应式网页设计【转载】
    闭包与非闭包
    跨域文档之间的访问
    ajax跨域之---服务器端代理实现
    jsonp跨域实现
    freemarker 命名空间
  • 原文地址:https://www.cnblogs.com/LinsenLi/p/9765805.html
Copyright © 2011-2022 走看看