中国大数据教育领跑者

IT培训上市机构

您现在的位置:首页 > Java培训 > java求职技巧>Java开发面试知识点总结之高并发编程-JUC 包(1)

Java开发面试知识点总结之高并发编程-JUC 包(1)

2018-01-12 18:10:24 作者:魔据大数据学院

Java开发者在面试的时候都可能遇到哪些知识点呢?相信这是很多参加Java技术培训Java初学者都想要知道的问题,今天魔据教育的Java技术培训班就为大家分享一篇Java开发面试知识点总结。今天先给大家分享一下基础知识面试中的高并发编程-JUC 包的第一部分

Java 5.0 提供了 java.util.concurrent(简称 JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。

Java开发面试知识点总结之高并发编程-JUC 包

Java开发面试知识点总结之高并发编程-JUC 包

1)多线程和单线程的区别和联系:

答:

在单核 CPU 中,将 CPU 分为很小的时间片,在每一时刻只能有一个线程在执行,是一种微观上轮流占用 CPU 的机制。

多线程会存在线程上下文切换,会导致程序执行速度变慢,即采用一个拥有两个线程的进程执行所需要的时间比一个线程的进程执行两次所需要的时间要多一些。

结论:即采用多线程不会提高程序的执行速度,反而会降低速度,但是对于用户来说,可以减少用户的响应时间。

2)如何指定多个线程的执行顺序?

解析:面试官会给你举个例子,如何让 10 个线程按照顺序打印 0123456789?(写代码实现)

答:

设定一个 orderNum,每个线程执行结束之后,更新 orderNum,指明下一个要执行的线程。并且唤醒所有的等待线程。

在每一个线程的开始,要 while 判断 orderNum 是否等于自己的要求值!!不是,则 wait,是则执行本线程。

3)线程和进程的区别:(必考)

答:

进程是一个执行中的程序,是系统进行资源分配和调度的一个独立单位;

线程是进程的一个实体,一个进程中拥有多个线程,线程之间共享地址空间和其它资源(所以通信和同步等操作线程比进程更加容易);

线程上下文的切换比进程上下文切换要快很多。

1)进程切换时,涉及到当前进程的 CPU 环境的保存和新被调度运行进程的 CPU 环境的设置。

2)线程切换仅需要保存和设置少量的寄存器内容,不涉及存储管理方面的操作。

4)多线程产生死锁的 4 个必要条件?

答:

互斥条件:一个资源每次只能被一个线程使用;

请求与保持条件:一个线程因请求资源而阻塞时,对已获得的资源保持不放;

不剥夺条件:进程已经获得的资源,在未使用完之前,不能强行剥夺;

循环等待条件:若干线程之间形成一种头尾相接的循环等待资源关系。

面试官:如何避免死锁?(经常接着问这个问题哦~

答:指定获取锁的顺序,举例如下:

比如某个线程只有获得 A 锁和 B 锁才能对某资源进行操作,在多线程条件下,如何避免死锁?

获得锁的顺序是一定的,比如规定,只有获得 A 锁的线程才有资格获取 B 锁,按顺序获取锁就可以避免死锁!!!

5sleep( ) wait( n)wait( ) 的区别:

答:

sleep 方法:是 Thread 类的静态方法,当前线程将睡眠 n 毫秒,线程进入阻塞状态。当睡眠时间到了,会解除阻塞,进行可运行状态,等待 CPU 的到来。睡眠不释放锁(如果有的话);

wait 方法:是 Object 的方法,必须与 synchronized 关键字一起使用,线程进入阻塞状态,当 notify 或者 notifyall 被调用后,会解除阻塞。但是,只有重新占用互斥锁之后才会进入可运行状态。睡眠时,释放互斥锁。

相关推荐
[免责声明]本文来源于网络转载,仅供学习交流使用,不构成商业目的。版权归原作者所有,如涉及作品内容、版权和其它问题请在30日内与本网联系,我们将在第一时进行处理

值班手机:18501996998

咨询QQ: 226594285 / 428683440

校区地址:北京市海淀区中关村科技园首农蓝海中心C座-7层

全国咨询热线:400-690-5006

点击关注:

魔据教育官方微博

魔据官方微信