面试题-简述synchronized和java.util.concurrent.locks.Lock的异同 ?
来源:互联网 发布:伐木累是什么软件 编辑:程序博客网 时间:2024/06/05 19:07
Android程序员面试宝典
主要相同点:Lock能完成synchronized所实现的所有功能
主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。Lock还有更强大的功能,例如,它的tryLock方法可以非阻塞方式去拿锁。
举例说明(对下面的题用lock进行了改写):
import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;public class ThreadTest { /** * @param args */ private int j; private Lock lock = new ReentrantLock(); public static void main(String[] args) { // TODO Auto-generated method stub ThreadTest tt = new ThreadTest(); for(int i=0;i<2;i++) { new Thread(tt.new Adder()).start(); new Thread(tt.new Subtractor()).start(); } } private class Subtractor implements Runnable { @Override public void run() { // TODO Auto-generated method stub while(true) { /*synchronized (ThreadTest.this) { System.out.println("j--=" + j--); //这里抛异常了,锁能释放吗? }*/ lock.lock(); try { System.out.println("j--=" + j--); }finally { lock.unlock(); } } } } private class Adder implements Runnable { @Override public void run() { // TODO Auto-generated method stub while(true) { /*synchronized (ThreadTest.this) { System.out.println("j++=" + j++); }*/ lock.lock(); try { System.out.println("j++=" + j++); }finally { lock.unlock(); } } } }}
作者:邓望保
链接:https://github.com/wolfking0608
來源:github
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
阅读全文
0 0
- 面试题-简述synchronized和java.util.concurrent.locks.Lock的异同 ?
- 面试题-简述synchronized和java.util.concurrent.locks.Lock的异同 ?
- 简述synchronized和java.util.concurrent.locks.Lock的异同?
- 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?
- 简述 synchronized 和 java.util.concurrent.locks.Lock 的异同 ?
- 简述synchronized和java.util.concurrent.locks.Lock的异同_JAVA
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized 和 java.util.concurrent.locks.Lock 的异同?
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized 和java.util.concurrent.locks.Lock 的异同
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized 和java.util.concurrent.locks.Lock 的异同
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized 和java.util.concurrent.locks.Lock 的异同
- synchronized和java.util.concurrent.locks.Lock的异同
- synchronized 和java.util.concurrent.locks.Lock的异同
- 【NanoPi Duo试用体验】+shell灯
- 将matlab中数据输出保存为txt或dat格式
- 用 Go 搭建 Kubernetes Operators
- 瀑布流布局的实现
- 【逆向】Windows可执行文件简述(二)
- 面试题-简述synchronized和java.util.concurrent.locks.Lock的异同 ?
- 【NanoPi Duo试用体验】+matrix_gpio移植
- 自己用VB编写的定时关机软件代码,欢迎大家交流
- 爬坑日记--------搭建springcloud微服务pom
- Linux命令行的艺术(1)-大纲
- RESTful API 设计指南
- 第八章 用QImage高质量绘图
- JspContext源码翻译
- 以旁观者的心态看待