Thread状态相关
看图
文章图片
主轴,状态为新建(new),就绪(runnable),运行中(running),结束(terminated)
主要的就绪(runnable和运行中(running)这两个状态的切换主要是Jvm控制的
主轴上面的阻塞状态,发生条件等待锁释放资源,也是jvm控制的
主轴下面为等待状态,发生条件为object.wait(),调用object.notify()重新进入就绪状态,等待jvm调度
sleep() 就是调用wait,就出了cpu的使用权,但是不会释放锁
yield()会让当前线程有运行中(running)回到就绪(runnable)
join()让线程并行执行
举个例子
主线程中调用sonThread.join();
主线程就会进入等待状态,一直等sonThread run()结束
它还有一个join(long millis)
举个例子
主线程中调用sonThread.join(1000);
主线程就会进入等待状态,一直等sonThread 执行1000millis后在开始执行
public final synchronized void join(long millis) throws InterruptedException {
2long base = System.currentTimeMillis();
3long now = 0;
4
5if (millis < 0) {
6throw new IllegalArgumentException("timeout value is negative");
7}
8
9//0则需要一直等到目标线程run完
10if (millis == 0) {
11while (isAlive()) {
12wait(0);
13}
14} else {
15//如果目标线程未run完且阻塞时间未到,那么调用线程会一直等待。
16while (isAlive()) {
17long delay = millis - now;
18if (delay <= 0) {
19break;
20}
21wait(delay);
22now = System.currentTimeMillis() - base;
23}
24}
25 }
interrupt()此操作会中断等待中的线程,并将线程的中断标志位置位。如果线程在运行态则不会受此影响。
【Thread状态相关】这只是个标志位,并不会立即终止线程,需要自己在线程中判断根据标志位中断,正在运行的不受处理
推荐阅读
- 停下“忙乱”的状态
- Java基础-高级特性-枚举实现状态机
- 老年状态
- Android超简单实现沉浸式状态栏
- 生活最好的状态
- Java内存泄漏分析系列之二(jstack生成的Thread|Java内存泄漏分析系列之二:jstack生成的Thread Dump日志结构解析)
- 思维导图作业3—工作相关导图
- 2019-09-08
- 2019-08-16day20总结
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别