阿里巴巴_java后端面经
自我介绍不多说! 1 多线程有什么用? ( 发挥多核CPU的优势 防止阻塞 便于建模 ) 2 怎么检测一个线程是否持有对象监视器 ( Thread类提供了一个holdsLock(Object obj)方法, 当且仅当对象obj的监视器被某条线程持有的时候才会返回true, 注意这是一个static方法,这意味着“某条线程”指的是当前线程。 ) 3 synchronized和ReentrantLock的区别 ( ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁 ReentrantLock可以获取各种锁的信息 ReentrantLock可以灵活地实现多路通知 ) 4 volatile 关键字的作用 (保证线程对内存的可见性,但是不能保证原子性 ) 5 什么是乐观锁和悲观锁 (乐观锁: 就像他的名字一样,对事情总保持一颗乐观的心, 他认为竞争不总是发生的,因此不需要总持有锁, 用比较替换尝试去修改内存中的值。悲观锁:对安全问题持悲观的状态认为竞争总是会发生的, 对资源进行操作时,总是部分青红皂白直接上锁 ) 6 用java编写一个会导致死锁的程序 7 什么是自旋锁 ( 自旋锁,是指尝试获取锁的线程不会阻塞, 而是循环的方式不断尝试,这样的好处是减少线程的上下文切换带来的开锁, 提高性能,缺点是循环会消耗CPU。 ) 8 什么是java内存模型 ( Java