Java并发编程面试题
Java并发编程面试题一、基础1、并行跟并发的区别 并行:同一时刻,多个线程都在执行,这就要求有多个CPU分别执行多个线程。 并发:在同一时刻,只有一个线程执行,但在一个时间段内,两个线程都执行了。其实现依赖于CPU切换线程,因为切换时间很短,所以基本对于用户是无感知的。 2、什么是进程和线程 进程:程序运行起来后在内存中执行,并附带有运行所需的资源,是系统进行资源分配的基本单位。 线程:CPU是被分配到线程的,所以线程是CPU分配的基本单位。在Java中,当我们启动一个main函数就相当于启动了一个JVM进程,而main函数的线程就是主线程。一个进程中有多个线程,多个线程共用进程的堆和方法区,但每个线程都有自己的程序计数器和栈。 3、线程有几种创建方式 继承Thread类:重写run方法,调用start()方法启动线程。 缺点:单继承,继承了Thread就不能继承别的类了 1234567891011public static class MyThread extends Thread { @Override public void run...
Java多线程梳理
Java多线程全面解析1. 多线程基础概念1.1 进程与线程进程是操作系统进行资源分配和调度的基本单位,每个进程都有独立的内存空间和系统资源。一个进程崩溃不会影响其他进程的运行,提供了良好的隔离性。 线程是进程中的一个执行单元,是CPU调度和执行的最小单位。同一进程内的所有线程共享进程的内存空间和系统资源,这使得线程间的通信更加高效,但也带来了数据同步的挑战。 1.2 为什么需要多线程 提高程序响应性:对于图形界面应用程序,使用多线程可以避免用户界面”冻结” 提高CPU利用率:当某个线程等待I/O操作时,其他线程可以继续执行,充分利用CPU资源 简化程序结构:对于需要处理多个独立任务的程序,多线程可以提供更清晰的设计 1.3 多线程的挑战 线程安全问题:多个线程同时访问共享数据可能导致数据不一致 死锁问题:线程间相互等待对方释放锁,导致程序无法继续执行 性能问题:线程上下文切换和同步操作会带来额外的开销 2. 线程创建方式2.1 继承Thread类这是最简单的创建线程方式,通过继承Thread类并重写run()方法。但这种方式的缺点是Java不支持多重继承,如果已经...
