美文网首页程序员
sleep,join,线程状态

sleep,join,线程状态

作者: 尉昌达 | 来源:发表于2020-07-04 23:15 被阅读0次
    • Thread.sleep(500);
      当前线程在cpu中睡个500ms,让给别的线程去运行。sleep完回到就绪状态

    • Thread.yield();
      让出cpu一会,返回就绪状态,放入等待队列中,下一个执行的线程可能是别的线程,也有可能还是自己。

    • join();
      比如有2个线程t1 ,t2 ,在t1内调用了t2.join(); 那么从这点开始t1要等t2运行完,才能继续执行。

    线程状态

    sleep(),wait(),join()在执行过程中都能被interrupt,中断标志设置为true,若是有捕获InterruptedException,在异常中自己处理。捕获到这个异常然后这个异常抛出之后,又会马上将线程中断标识重置为false

    public class TestInterrupt {
    
        public static void main(String[] args){
            Thread thread = new Thread(() -> {
                try {
                    Thread.sleep(100000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println();
                System.out.println("end.....");
            });
    
            thread.start();
    
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(thread.isInterrupted());
            thread.interrupt();
            System.out.println(thread.isInterrupted());
    
        }
    
    }
    
    

    执行后输出:

    false
    false
    
    end.....
    java.lang.InterruptedException: sleep interrupted
        at java.lang.Thread.sleep(Native Method)
        at com.mashibing.mytest.TestInterrupt.lambda$main$0(TestInterrupt.java:11)
        at java.lang.Thread.run(Thread.java:748)
    
    

    相关文章

      网友评论

        本文标题:sleep,join,线程状态

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