不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java 语言一个重要
的特点就是内置了对并发的支持,让 Java 大受企业和程序员的欢迎。大多数待遇丰厚的
Java 开发职位都要求开发者精通多线程技术并且有丰富的 Java 程序开发、调试、优化经
验,所以线程相关的问题在面试中经常会被提到。
在典型的 Java 面试中, 面试官会从线程的基本概念问起, 如:为什么你需要使用线程,
如何创建线程,用什么方式创建线程比较好(比如:继承 thread 类还是调用 Runnable
接口),然后逐渐问到并发问题像在 Java 并发编程的过程中遇到了什么挑战,Java 内存
模型,JDK1.5 引入了哪些更高阶的并发工具,并发编程常用的设计模式,经典多线程问题
如生产者消费者,哲学家就餐,读写器或者简单的有界缓冲区问题。仅仅知道线程的基本
概念是远远不够的, 你必须知道如何处理死锁,竞态条件,内存冲突和线程安全等并发问
题。掌握了这些技巧,你就可以轻松应对多线程和并发面试了。
许多 Java 程序员在面试前才会去看面试题,这很正常。因为收集面试题和练习很花时间,
所以我从许多面试者那里收集了 Java 多线程和并发相关的 50 个热门问题。我只收集了比
较新的面试题且没有提供全部答案。想必聪明的你对这些问题早就心中有数了, 如果遇到
不懂的问题,你可以用 Google 找到答案。若你实在找不到答案,可以在文章的评论中向
我求助。你也可以在这找到一些答案 Java 线程问答 Top 12。
50 道 Java 线程面试题
下面是 Java 线程相关的热门面试题,你可以用它来好好准备面试。
1) 什么是线程?
线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运
作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。
比如,如果一个线程完成一个任务要 100 毫秒,那么用十个线程完成改任务只需 10 毫秒。
Java 在语言层面对多线程提供了卓越的支持,它也是一个很好的卖点。欲了解更多详细信
息请点击这里。
2) 线程和进程有什么区别?
线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进
程使用不同的内存空间,而所有的线程共享一片相同的内存空间。别把它和栈内存搞混,
每个线程都拥有单独的栈内存用来存储本地数据。更多详细信息请点击这里。
3) 如何在 Java 中实现线程?
在语言层面有两种方式。java.lang.Thread 类的实例就是一个线程但是它需要调用
java.lang.Runnable 接口来执行,由于线程类本身就是调用的 Runnable 接口所以你可
以继承 java.lang.Thread 类或者直接调用 Runnable 接口来重写 run()方法实现线程。
更多详细信息请点击这里.
4) 用 Runnable 还是 Thread?