资料内容:
1. 为什么要使用并发编程
提升多核CPU的利用率:一般来说一台主机上的会有多个CPU核心,我们可以创建多个线程,理论
上讲操作系统可以将多个线程分配给不同的CPU去执行,每个CPU执行一个线程,这样就提高了
CPU的使用效率,如果使用单线程就只能有一个CPU核心被使用。
比如当我们在网上购物时,为了提升响应速度,需要拆分,减库存,生成订单等等这些操作,就可
以进行拆分利用多线程的技术完成。面对复杂业务模型,并行程序会比串行程序更适应业务需求,
而并发编程更能吻合这种业务拆分 。
简单来说就是:
充分利用多核CPU的计算能力;
方便进行业务拆分,提升应用性能
2. 多线程应用场景
例如: 迅雷多线程下载、数据库连接池、分批发送短信等。
3. 并发编程有什么缺点
并发编程的目的就是为了能提高程序的执行效率,提高程序运行速度,但是并发编程并不总是能提
高程序运行速度的,而且并发编程可能会遇到很多问题,比如:内存泄漏、上下文切换、线程安
全、死锁等问题。
4. 并发编程三个必要因素是什么?
原子性:原子,即一个不可再被分割的颗粒。原子性指的是一个或多个操作要么全部执行成功要么
全部执行失败。
可见性:一个线程对共享变量的修改,另一个线程能够立刻看到。(synchronized,volatile)
有序性:程序执行的顺序按照代码的先后顺序执行。(处理器可能会对指令进行重排序)
5. Java 程序中怎么保证多线程的运行安全?
出现线程安全问题的原因一般都是三个原因:
线程切换带来的原子性问题 解决办法:使用多线程之间同步synchronized或使用锁(lock)。
缓存导致的可见性问题 解决办法:synchronized、volatile、LOCK,可以解决可见性问题
编译优化带来的有序性问题 解决办法:Happens-Before 规则可以解决有序性问题
6. 并行和并发有什么区别?
并发:多个任务在同一个 CPU 核上,按细分的时间片轮流(交替)执行,从逻辑上来看那些任务是
同时执行。
并行:单位时间内,多个处理器或多核处理器同时处理多个任务,是真正意义上的“同时进行”。
串行:有n个任务,由一个线程按顺序执行。由于任务、方法都在一个线程执行所以不存在线程不
安全情况,也就不存在临界区的问题。