Android面试---多线程

多线程的出现是要解决什么问题?

CPU、内存、I/O设备的速度是有极大的差异,为了合理利用CPU的高性能,平衡三者的速度差异。

1.CPU增加缓存,以均衡与内存的速度差异,导致可见性问题

2.操作系统增加进程、线程,以分时复用CPU,进而均衡CPU与I/O设备的速度的差异,导致原子性问题

3.编译程序优化指令执行次序,使得缓存能够更加合理地利用,导致有序性问题。

线程不安全指什么?

如果多个线程对同一个共享数据进行访问而不采取同步操作的话,那么操作结果是不一样的。

并发出现现场不安全的本质是什么?

1.CPU缓存引起的可见性问题

2.分时复用引起的原子性问题

3.指令重排序引起的有序性问题

怎么解决并发问题?

1.volatile、synchronized关键字和Happens-Before规则以及as-if-serial原理

2.可见性,有序性,原子性

线程安全实现方法

1.互斥同步  synchronized,ReentrntLock

2.非阻塞同步  CAS,Atomic类

3.无同步方案  栈封闭、线程本地存储、可重入代码

线程有哪几种使用方式?

1.实现Runnable接口

2.实现Callable接口

3.继承Thread类

线程的互斥同步方式有哪些?如何比较和选择

1.锁的视线  synchronized是JVM实现的,而ReentrantLock是JDK实现的

2.性能  java对synchronized进行了很多优化,例如自旋锁,synchronized 与 ReentrantLock 大致相同。

3.等待可中断  当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情。ReentrantLock 可中断,而 synchronized 不行。

4.锁绑定多个条件  一个 ReentrantLock 可以同时绑定多个 Condition 对象。

5.公平锁 公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。

synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但是也可以是公平的。

6.除非需要使用 ReentrantLock 的高级功能,否则优先使用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地支持它,而 ReentrantLock 不是所有的 JDK 版本都支持。并且使用 synchronized 不用担心没有释放锁而导致死锁问题,因为 JVM 会确保锁的释放。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值