美文网首页
Thread状态相关

Thread状态相关

作者: DustMoon | 来源:发表于2018-06-27 10:56 被阅读0次

    看图


    主轴,状态为新建(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()此操作会中断等待中的线程,并将线程的中断标志位置位。如果线程在运行态则不会受此影响。

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

    相关文章

      网友评论

          本文标题:Thread状态相关

          本文链接:https://www.haomeiwen.com/subject/eaqbyftx.html