网站建设规划书样板,昆山市建设工程交易中心网站,张家港市做网站的公司,营销网站的关键字1.线程的运行状态 在Java中#xff0c;线程的状态一共是6种状态#xff0c;分别是
NEW#xff1a;初始状态#xff0c;线程被构建#xff0c;但是还没有调用start方法 RUNNABLED#xff1a;运行状态#xff0c;JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行…1.线程的运行状态 在Java中线程的状态一共是6种状态分别是
NEW初始状态线程被构建但是还没有调用start方法 RUNNABLED运行状态JAVA线程把操作系统中的就绪和运行两种状态统一称为“运行中” BLOCKED阻塞状态表示线程进入等待状态,也就是线程因为某种原因放弃了CPU使用权阻塞也分为几种情况 等待阻塞运行的线程执行wait方法jvm会把当前线程放入到等待队列 同步阻塞运行的线程在获取对象的同步锁时若该同步锁被其他线程锁占用了那么jvm会把当前的线程放入到锁池中 其他阻塞运行的线程执行Thread.sleep或者t.join方法或者发出了I/O请求时JVM会把当前线程设置为阻塞状态当sleep结束、join线程终止、io处理完毕则线程恢复 WAITING: 等待状态 TIME_WAITING超时等待状态超时以后自动返回 TERMINATED终止状态表示当前线程执行完毕
2.线程生命周期图 3.线程的终止
3.1 线程的中断需要外部干预情况 线程中存在无限循环执行比如while(true)循环 线程中存在一些阻塞的操作比如sleep、wait、join等
3.2 stop方法终止 调用stop方法去强行中断那么这个时候相当于是发送一个指令告诉操作系统把这个线程结束掉 但是操作系统的这个结束动作完成不代表线程 中的任务执行完成很可能出现线程的任务执行了一般被强制中断最终导致数据产生问题。 这种行为 类似于在linux系统中执行 kill -9类似它是一种不安全的操作。
3.3 interrupt 方法
我们把while(true)改成while(flag)这 个flag可以作为共享变量被外部修改修改之后使得循环条件无法被满足从而退出循环并且结束线程。
当其他线程通过调用当前线程的interrupt方法表示向当前线程打个招呼告诉他可以中断线程的执行了至于什么时候中断取决于当前线自己。线程通过检查自身是否被中断来进行相应可以通过isInterrupted()来判断是否被中断。 处于阻塞状态下的线程中断 我们平时在线程中使用的sleep、wait、join等操作它都会抛出一个 InterruptedException异常为什么会抛出异常是因为它在阻塞期间必须要能够响应被其他线程发起中断请求之后的一个响应而这个响应是通过InterruptedException来体现的。
但是这里需要注意的是在这个异常中如果不做任何处理的话我们是无法去中断线程的因为当前的异常只是响应了外部对于这个线程的中命令同时线程的中断状态也会复位如果需要中断则还 需要在catch中添加下面的代码 4.线程占用cpu过高排查
通过 jps 命令查看java进程的pid
通过jstack 查看线程日志 通过 top -c 动态显示进程及占用资源的排行榜从而找到占用CPU最高的进程PID得到的PID80972
#top -c
然后再定位到对应的线程 top -H -p 80972 查找到该进程中最消耗CPU的线程得到PID81122
#top -H -p 80972
通过 printf “0x%x\n” 81122 命令把对应的线程PID转化为16进制
#printf 0x%x\n 81122
截止执行这个命令 jstack 80972 | grep -A 20 0x13ce2 查看线程Dump日志其中-A 20表示
展示20行 80972表示进程ID 0x13ce2表示线程ID
#jstack 80972 | grep -A 20 0x13ce2
5.并发和并行
并发是指多个任务在同一时间段内交替执行的能力。当多个任务共享同一资源并且它们的执行时间有重叠时就可以实现并发。
并行是指多个任务在同一时刻同时执行的能力。
QPS每秒查询数是指系统在一秒内能够处理的查询请求数量。查询请求可以是数据库查询、API调用、HTTP请求等。
TPS每秒事务数是指系统在一秒内能够处理的事务数量。事务可以是数据库中的读写操作、网络请求、交易等。