1、什么是线程?
定义:线程是程序中的执行路径,是操作系统进行调度的基本单位。它允许程序并发执行多个任务,提高程序的响应速度和资源利用率。
2、为什么需要线程?
1、提高并发性:线程允许程序同时执行多个任务,充分利用CPU资源。
2、提高响应速度:多线程可以处理用户输入、绘制图形、播放音乐等任务,使得程序更加流畅和响应迅速。
3、节约系统资源:相对于进程,线程的创建和销毁开销较小,可以更有效地利用系统资源。
3、线程和进程的区别是什么?
1、独立性:进程拥有独立的内存空间和系统资源,而线程是进程中的一个实体,共享进程的内存空间和系统资源。
2、资源占用:进程是资源分配的基本单位,而线程是调度执行的基本单位。线程比进程更轻量,创建和销毁的开销更小。
3、并发性:多个线程可以并发执行在同一个进程内,而多个进程则无法直接共享内存和资源。
4、 创建线程有几种方式?它们的优缺点
1、继承Thread类
优点:简单直观。
缺点:类的继承性受限,无法再继承其他类。
2、实现Runnable接口
优点:可以避免Java的单继承特性带来的局限,多个线程可以共享同一个Runnable实例。
缺点:相对于继承Thread类,实现接口的方式稍微复杂一些。
3、实现Callable接口
优点:可以获得执行结果,但需要借助ExecutorService执行器来启动线程。
缺点:相对于Runnable接口,实现Callable接口的方式更复杂一些。
5、run和start的区别是什么?
1、run方法:直接调用run方法并没有创建线程,而是在原来的线程中执行的代码。
2、start方法:调用start方法则是创建了线程,并在新线程中执行代码(与原来的线程并发执行)。
6、Java线程的状态有哪些?
NEW:线程对象已经创建,尚未启动。
RUNNABLE:线程已经启动,正在运行或准备运行。
BLOCKED:等待锁的时候进入的状态。
WAITING:特殊的阻塞状态,等待其他线程执行特定的操作。
TIMED_WAITING:线程等待另一个线程执行特定操作,但有一个时间限制。
TERMINATED:线程已经执行完毕或被中断。
7、同步和异步的区别是什么?
同步:多个线程在同一时间段内访问共享资源时,只有一个线程能够占用资源,其他线程必须等待。
异步:多个线程在不同时间段内访问共享资源时,各自单独占用资源,不存在竞争问题。