目录
一、Java多线程
1.1什么是多线程
指的是在一个进程中同时运行多个线程,每个线程都可以独立执行不同的任务或操作。 与单线程相比,多线程可以提高程序的并发性和响应能力。
1.2什么是进程
是指正在运行的程序的实例。每个进程都拥有自己的内存空间、代码、数据和文件等资源,可以独立运行、调度和管理。在操作系统中,进程是系统资源分配的最小单位,是实现多任务的基础。
1.3java线程的生命周期
Java 线程的生命周期
新建状态(New):当线程对象被创建但尚未启动时,线程处于新建状态。
就绪状态(Runnable):当线程获得CPU时间片并执行时,线程处于就绪状态。
运行状态(Running):当线程获得CPU时间片并执行时,线程处于运行状态。
阻塞状态(Blocked):当线程在等待某个条件的时候,会进入阻塞状态,直到条件满足。
等待状态(Waiting):当线程等待某个条件的时候,会进入等待状态,直到条件满足。
超时等待状态(Timed Waiting):当线程等待某个条件的时候,可以设置一个超时时间,超过这个时间后线程会进入超时等待状态。
终止状态(Terminated):线程执行完任务或发生异常后,线程处于终止状态,不再执行。
二、如何实现多线程
2.1实现Runnable接口
1.2实现Callable接口
Callable与Runnable类似,都是只有一个抽象方法的函数式接口,不同的是,Callable有返回值。
1.3继承Thread类
我们在程序⾥⾯调用了 start() 方法后, 虚拟机会先为我们创建⼀个线程, 然后等到这个线程第⼀次得到时间片时再调用 run() 方法。
1.4 Thread类的构建方法
Thread类是一个Runnable接口的实现类,通过init的调用来实现初始化。
init方法的一些参数:
g:线程组, 指定这个线程是在哪个线程组下;
target:指定要执行的任务;
name:线程的名字,多个线程的名字是可以重复的。
acc:用于初始化私有变量 inheritedAccessControlContext 。
inheritThreadLocals:可继承的ThreadLocal ,Thread类里面有两个私有属性来支ThreadLocal。
1.5Thread类与Runnable接口的比较
由于Java“ 单继承,多实现 ” 的特性,Runnable接⼝使⽤起来⽐ Thread 更灵活。
Runnable接口出现更符合面向对象,将线程单独进行对象的封装。
Runnable接口出现,降低了线程对象和线程任务的耦合性。
如果使用线程时不需要使用 Thread 类的诸多⽅法,显然使用Runnable接口更为轻量。