初识 JAVA并发编程 笔记
线程:CPU执行的最小执行单元
并发/高并发(服务端能够承载的吞吐量)
1、硬件基础
CPU核心数, 内存, 磁盘[机械硬盘,固态硬盘], 网络
2、软件层面(最大化的利用硬件资源)
线程数量、 JVM内存分配大小、 网络通讯机制(BIO 、NIO、AIO)、磁盘IO
3、线程数量如何提升服务端的并发数量
好比:单行车道,和多行车道
并发和并行
单核心CPU也是可以支持多线程的 --> CUP的时间片切换
多线程的特点
· 异步,不需要即时反馈的,可以异步执行,减少执行时间
· 并行,同时执行,多任务执行
Java 中的线程
1、Runnable 实现接口
2、Thread 继承类
3、Callable / Furtrue 实现接口 返回执行状态和结果,成功或者失败处理方式
这个工具如何去使用,什么时候使用
1、网络请求分发的场景
2、文件导入,分片上传
3、短信发送
线程的基础
1、线程的生命周期(java 中有 6 种状态; 操作系统层面 5 种)
# 线程状态
1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。
2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。
线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取CPU的使用权,此时处于就绪状态(ready)。就绪状态的线程在获得CPU时间片后变为运行中状态(running)。
3.阻塞(BLOCKED):表示线程阻塞于锁。
4.等待(WAITING):进入该状态的线程需要等待其他线程做出一些特定动作(通知或中断)
[sleep(), wait()、jion()、LockSupport.park() ]
5.超时等待(TIMED_WAITING):该状态不同于WAITING,它可以在指定的时间后自行返回。
[sleep(long), wait(long)、jion(long)、LockSupport.parkUntil(XX) ]
6. 终止(TERMINATED):表示该线程已经执行完毕。
线程阻塞
Time_Waiting
Waiting
Blocked 同步代码块阻塞, 锁阻塞状态
IO阻塞
线程启动调 (系统线程启动调用线程流程图)
线程终止方式
1 线程中断
thread.stop(); #不建议; 暴力强制终止线程
interrupt #友好终止过程,但凡让线程阻塞的机制都有 一个 InterruptedException
//isInterrupted 是个 native 方法 ,本质上调用的 是 jvm.cpp C或C++语言中定义的方法
if(!Thread.currentThread().isInterrupted()){
// Thread.currentThread().isInterrupted() 默认是 false
// Thread.currentThread().interrupt();
}
thread.start();
thread.interrupt(); // 设置interrupted = true ; 查看源码可知; 通过一个共享变量来