Thread状态相关

看图

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状态相关】这只是个标志位,并不会立即终止线程,需要自己在线程中判断根据标志位中断,正在运行的不受处理

    推荐阅读