多线程的面试题解答(二)
2017-12-27 17:32
183 查看
1.什么是可重入锁ReentrantLock
线程可以进入任何一个它已经拥有锁同步的代码块。同一个线程,外层函数获取锁后,内层仍然有获取该锁的代码。ReentrantLock还提供了中断锁和定时锁等待。
2.当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
如果该对象其他方法没有加synchronized关键字,可以进入
如果该方法调用了wait方法,则可以进入
如果其它方法没有synchronized同时该方法没有调用wait,则不可以进入
如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是该对象。
如下:
3.synchronized和java.util.concurrent.locks.Lock的异同
性能差不多,都是实现线程的之间的同步。
Lock可以主动中断锁,还提供了一个condition对象
4.乐观锁和悲观锁
1.悲观锁:即很悲观,每次拿数据的时候都觉得数据会被人更改,所以拿数据的时候就把这条记录锁掉,这样别人就没法改这条数据了,一直到你的锁释放。
2.乐观锁:即很乐观,查询数据的时候总觉得不会有人更改数据,等到更新的时候再判断这个数据有没有被人更改,有人更改了则本次更新失败。
悲观锁用MUTEX实现,互斥锁(排他锁)
乐观锁用CAS实现
线程可以进入任何一个它已经拥有锁同步的代码块。同一个线程,外层函数获取锁后,内层仍然有获取该锁的代码。ReentrantLock还提供了中断锁和定时锁等待。
2.当一个线程进入某个对象的一个synchronized的实例方法后,其它线程是否可进入此对象的其它方法?
如果该对象其他方法没有加synchronized关键字,可以进入
如果该方法调用了wait方法,则可以进入
如果其它方法没有synchronized同时该方法没有调用wait,则不可以进入
如果其他方法是static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因为非静态的方法用的是该对象。
如下:
/** * @author: krauser * @date: Create in 下午5:39 2017/12/27 * @Description: */ public class TestSyn { static class test { public static synchronized void add() throws InterruptedException { System.out.println("add.."); TimeUnit.SECONDS.sleep(3); } public static synchronized void get() throws InterruptedException { System.out.println("get.."); } } public static void main(String[] args) throws InterruptedException { //test testSyn = new test(); new Thread(() -> { try { test.add(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); new Thread(() -> { try { test.get(); } catch (InterruptedException e) { e.printStackTrace(); } }).start(); TimeUnit.SECONDS.sleep(10); } }
3.synchronized和java.util.concurrent.locks.Lock的异同
性能差不多,都是实现线程的之间的同步。
Lock可以主动中断锁,还提供了一个condition对象
4.乐观锁和悲观锁
1.悲观锁:即很悲观,每次拿数据的时候都觉得数据会被人更改,所以拿数据的时候就把这条记录锁掉,这样别人就没法改这条数据了,一直到你的锁释放。
2.乐观锁:即很乐观,查询数据的时候总觉得不会有人更改数据,等到更新的时候再判断这个数据有没有被人更改,有人更改了则本次更新失败。
悲观锁用MUTEX实现,互斥锁(排他锁)
乐观锁用CAS实现
相关文章推荐
- 多线程的面试题解答(一)
- 多线程的面试题解答(三)
- 剑指offer面试题 java解答36-40
- Java并发多线程面试题 Top 50
- 多线程并发库高级应用 之 使用java5中同步技术的3个面试题
- 15个Java多线程面试题及答案
- 前端面试题汇总与解答
- 阿里巴巴2015校园招聘软件岗面试题3解答
- 算法面试题解答(七)
- 15个顶级Java多线程面试题及答案
- 剑指offer面试题 java解答1-5
- Java多线程有哪几种实现方式? Java中的类如何保证线程安全? 请说明ThreadLocal的用法和适用场景(面试题)
- 解答一运维面试题
- 15个Java多线程面试题及回答
- 史上最全Java多线程面试题及答案
- 全新整理:微软、Google等公司的面试题及解答、第161-170题
- 多线程经典面试题
- java之多线程面试题
- JAVA面试题解惑系列(十)——话说多线程
- 全新整理:微软、Google等公司的面试题及解答、第161-170题