android面试-JavaConcurrent(Java并发)(深信服、美图)
JavaConcurrent(Java并发)(都是github上的内容)Java并发基础知识生产者和消费者问题Thread和Runnable实现多线程的区别线程中断守护线程与阻塞线程synchronized多线程环境中安全使用集合API实现内存可见的两种方法比较:加锁和volatile变量死锁可重入内置锁使用wait/notify/notifyAll实现线程间通信NIO1、java有哪几种线程开启
·
JavaConcurrent(Java并发)(都是github上的内容)
- Java并发基础知识
- 生产者和消费者问题
- Thread和Runnable实现多线程的区别
- 线程中断
- 守护线程与阻塞线程
- synchronized
- 多线程环境中安全使用集合API
- 实现内存可见的两种方法比较:加锁和volatile变量
- 死锁
- 可重入内置锁
- 使用wait/notify/notifyAll实现线程间通信
- NIO
并发这一块挺重要的,面试官经常会问,这一块没有深入去了解,所以可以看看上述链接,挺详细的。
1、java有哪几种线程开启方式
Java中实现多线程有两种方法:继承Thread、实现Runnable接口,在程序开发中只要是多线程,肯定永远以实现Runnable接口为主,因为实现Runnable接口相比继承Thread类有如下优势:
- 可以避免由于Java的单继承特性而带来的局限
- 增强程序的健壮性,代码能够被多个线程共享,代码与数据是独立的
- 适合多个相同程序的线程区处理同一资源的情况
2、如何保证线程顺序执行,即A执行完之后才执行B、B执行完之后才执行C
面试的时候因为本身就对于并发使用不多,然后面试官问的时候,一开始的思路是通过join去实现,但是回到宿舍马上查了一下发现好像不行,最后找到一种办法是通过线程池,有四种类型线程池,其中一种是每次只执行一个线程,从而保证线程能正确执行。
3、volitatile变量作用(主要还是出现在笔试中)
接触过就是在双重锁单例中,保证可见性、有序性等,但无法保证原子性,原子性意思即要不就0要不就1,如果失败会回退到0。
4、对象锁、方法锁、类锁区别(美图)
对象锁跟方法锁锁的是有对象的,类锁只是一个概念上的东西,并不是真实存在的,它只是用来帮助我们理解锁定实例方法和静态方法的区别的
当程序运行到非静态的synchronized同步方法上时,自动获得与正在执行代码类的当前实例(this实例)有关的锁。获得一个对象的锁也称为获取锁、锁定对象、在对象上锁定或在对象上同步。
由于一个class不论被实例化多少次,其中的静态方法和静态变量在内存中都只有一份。所以,一旦一个静态的方法被申明为synchronized。此类所有的实例化对象在调用此方法,共用同一把锁,我们称之为类锁。
概念上的我们理解清楚了,那么这两个使用的时候有什么差别,但我们使用的时候,对象锁跟类锁是不互斥的,因为他们都不是同个对象的东西,对象锁是对于对象的锁,即锁上之后同一对象在不同的线程中无法同时访问锁的资源,而类锁的话针对的是静态实例之类的,是一个共享的资源,被锁上之后不同对象无法获取资源
更多推荐
已为社区贡献1条内容
所有评论(0)