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 {
 2     long base = System.currentTimeMillis();
 3     long now = 0;
 4 
 5     if (millis < 0) {
 6         throw new IllegalArgumentException("timeout value is negative");
 7     }
 8     
 9     //0则需要一直等到目标线程run完
10     if (millis == 0) {
11         while (isAlive()) {
12             wait(0);
13         }
14     } else {
15         //如果目标线程未run完且阻塞时间未到,那么调用线程会一直等待。
16         while (isAlive()) {
17             long delay = millis - now;
18             if (delay <= 0) {
19                 break;
20             }
21             wait(delay);
22             now = System.currentTimeMillis() - base;
23         }
24     }
25 }

interrupt()此操作会中断等待中的线程,并将线程的中断标志位置位。如果线程在运行态则不会受此影响。

这只是个标志位,并不会立即终止线程,需要自己在线程中判断根据标志位中断,正在运行的不受处理

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 进程和线程 进程 所有运行中的任务通常对应一个进程,当一个程序进入内存运行时,即变成一个进程.进程是处于运行过程中...
    小徐andorid阅读 7,856评论 3 53
  • 该文章转自:http://blog.csdn.net/evankaka/article/details/44153...
    加来依蓝阅读 12,072评论 3 87
  • Java多线程学习 [-] 一扩展javalangThread类 二实现javalangRunnable接口 三T...
    影驰阅读 8,086评论 1 18
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 7,198评论 1 15
  • 雨纷飞 湿花蕊 几番轮回难面对 情已远 爱相随 奈何往事不可追 梦已断 楼已危 尘埃落定人难寐 相思泪 心已碎 临...
    郑卫国原创诗歌阅读 3,452评论 0 3