Thread中的方法yield,join,sleep

yield

方法定义:public static native void yield()
这是一个native的静态方法,用于表示当前线程让出执行机会,让CPU调度其他线程执行

@Test
public void yieldTest() throws Exception {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            for(int i=0; i< 10; i++) {
                if(i==5) {
                    Thread.yield();
                }
                System.out.println(i);
            }
        }
    });

    t.start();

    Thread.sleep(1);
    System.out.println("主线程开始执行");

}

总结:

  1. 当前线程不会阻塞,同样有执行的机会
  2. 静态方法,一般用于当前线程让步
  3. 如果线程获取了锁,则不会释放

join

方法定义:public final void join() throws InterruptedException
表示让当前线程加入到另一个线程中,等另一个线程执行结束之后再执行

@Test
public void joinTest() throws Exception {
    Thread t = new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                Thread.sleep(1);
            } catch (Exception e) {
                // ignore
            }

            for(int i=0; i< 10; i++) {
                System.out.println(i);
            }
        }
    });

    t.start();
    t.join();
    System.out.println("主线程开始执行");
    Thread.sleep(1);

}

本来调用Thread.sleep会让主线程先执行
但是t.join表示主线程加入t线程,会在t线程执行之后执行
所有最好执行结果为:t先执行,主线程后执行


图片.png

总结:

  1. 当前线程会阻塞,直到加入的线程执行完成
  2. 方法响应中断
  3. 如果获取了锁,是不会释放锁的

sleep

方法定义:public static native void sleep(long millis)
静态方法,表示让线程睡眠一段时间

  1. 当前线程会阻塞,直到加入的线程执行完成
  2. 方法响应中断
  3. 如果获取了锁,是不会释放锁的

你可能感兴趣的:(Thread中的方法yield,join,sleep)