Java并发面试题库:线程、进程、栈、堆、死锁、活锁等

需积分: 11 0 下载量 79 浏览量 更新于2024-08-28 收藏 34KB MD 举报
Java并发面试题库 Java并发编程是Java开发者面试中的一道重要题目,本资源提供了52道Java常用的并发面试题目,包含答案,涵盖了Java多线程编程的基础知识、线程同步、死锁、活锁、线程安全、线程通信等方面的知识点。 一、线程与进程 * 线程与进程的区别:进程是系统进行资源分配和调度的一个独立单位;线程是进程的一个实体,是CPU调度和分派的基本单位。 * 线程与进程的关系:一个进程可以有多个线程,但至少有一个线程;资源分配给进程,同一进程的所有线程共享进程中的所有资源。 * 线程在执行中需要同步协作,不同的进程的线程间要利用消息通信的办法实现同步。 二、多线程编程 * 在单核cpu机器上,多线程编程的意义:如果程序是cpu密集型的,不推荐使用多线程开发,因为过多的线程切换反而会降低程序的运行效率。如果程序涉及到其他I/O操作的任务,可以使用多线程开发提高cpu的使用效率。 * 多线程中栈与堆的关系:栈是私有的,只能被所属线程使用;而堆是公有的,可以被所有线程使用。 * JVM中设置每个线程的堆栈大小的参数:使用-Xss参数为启动的每个线程分配的内存大小。 三、死锁和活锁 * 死锁的定义:两个或多个线程相互等待对方释放锁,则会出现死锁现象。 * 活锁的定义:任务执行者没有被阻塞,但由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败。 * 死锁和活锁的区别:死锁是线程之间的相互等待,活锁是任务执行者的重复尝试。 四、线程同步 * Thread.sleep()方法与Object.wait()方法的区别: + 相同点:两者都可以用于在多线程环境中使当前线程暂时阻塞。 + 不同点: - 从所属类来看:wait()属于Object类的方法,而sleep()属于Thread类的方法。 - 从使用场景来看:wait()必须与notify()或notifyAll()方法配合使用,且调用之前必须保证wait()或notify()方法的调用者的锁被当前线程持有。 - 从是否需要捕获异常来看:wait()、notify()、notifyAll()不需要捕获异常。 这些知识点涵盖了Java多线程编程的基础知识、线程同步、死锁、活锁、线程安全、线程通信等方面的知识点,对Java开发者面试和实际开发工作具有重要的参考价值。