文档详情

Java多线程面试题:18道线程并发面试题.docx

发布:2022-06-11约4.57千字共5页下载文档
文本预览下载声明
第 第 PAGE 1 页 共 NUMPAGES 1 页 Java多线程面试题:18道线程并发面试题 Java多线程常见面试题,Java多线程相关面试题可以说是不行避开的,所以今日就为大家共享一些面试题。1、什么是线程? 线程是操作系统能够举行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它举行多处理器编程,你可以用法多线程对运算密集型任务提速。比如,假如一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。2、线程和进程有什么区分? 线程是进程的子集,一个进程可以有无数线程,每条线程并行执行不同的任务。不同的进程用法不同的内存空间,而全部的线程分享一片相同的内存空间。每个线程都拥有单独的栈内存用来存储本地数据。3、如何在Java中实现线程? 两种方式:java.lang.Thread 类的实例就是一个线程但是它需要调用java.lang.Runnable接口来执行,因为线程类本身就是调用的Runnable接口所以你可以继承java.lang.Thread 类或者挺直调用Runnable接口来重写run()办法实现线程。4、Java 关键字volatile 与 synchronized 作用与区分? Volatile: 它所修饰的变量不保留拷贝,挺直拜访主内存中的。 在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要拜访的变量的副本。这样就会浮现同一个变量在某个眨眼,在一个线程的memory中的值可能与另外一个线程memory中的值,或者main memory中的值不全都的状况。 一个变量声明为volatile,就意味着这个变量是随时会被其他线程修改的,因此不能将它cache在线程memory中。 synchronized: 当它用来修饰一个办法或者一个代码块的时候,能够保证在同一时刻最多惟独一个线程执行该段代码。 一、当两个并发线程拜访同一个对象object中的这个synchronized(this)同步代码块时,一个时光内只能有一个线程得到执行。另一个线程必需等待当前线程执行完这个代码块以后才干执行该代码块。 二、然而,当一个线程拜访object的一个synchronized(this)同步代码块时,另一个线程仍然可以拜访该object中的非synchronized(this)同步代码块。 三、尤其关键的是,当一个线程拜访object的一个synchronized(this)同步代码块时,其他线程对object中全部其它synchronized(this)同步代码块的拜访将被堵塞。 四、当一个线程拜访object的一个synchronized(this)同步代码块时,它就获得了这个object的对象锁。结果,其它线程对该object对象全部同步代码部分的拜访都被临时堵塞。 五、以上规章对其它对象锁同样适用。5、有哪些不同的线程生命周期? 当我们在Java程序中新建一个线程时,它的状态是New。当我们调用线程的start()办法时,状态被转变为Runnable。线程调度器会为Runnable线程池中的线程分配CPU时光并且讲它们的状态转变为Running。其他的线程状态还有Waiting,Blocked 和Dead。6、你对线程优先级的理解是什么? 每一个线程都是有优先级的,普通来说,高优先级的线程在运行时会具有优先权,但这依靠于线程调度的实现,这个实现是和操作系统相关的(OS dependent)。 我们可以定义线程的优先级,但是这并不能保证高优先级的线程会在低优先级的线程前执行。线程优先级是一个int变量(从1-10),1代表最低优先级,10代表最高优先级。7、什么是死锁(Deadlock)?如何分析和避开死锁? 死锁是指两个以上的线程永久堵塞的状况,这种状况产生起码需要两个以上的线程和两个以上的资源。 分析死锁,我们需要查看Java应用程序的线程转储。我们需要找出那些状态为BLOCKED的线程和他们等待的资源。每个资源都有一个唯一的id,用这个id我们可以找出哪些线程已经拥有了它的对象锁。 避开嵌套锁,只在需要的地方用法锁和避开无限期等待是避开死锁的通常方法。8、什么是线程平安?Vector是一个线程平安类吗? 假如你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。假如每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程平安的。 一个线程平安的计数器类的同一个实例对象在被多个
显示全部
相似文档