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("主线程开始执行");
}
总结:
- 当前线程不会阻塞,同样有执行的机会
- 静态方法,一般用于当前线程让步
- 如果线程获取了锁,则不会释放
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先执行,主线程后执行
总结:
- 当前线程会阻塞,直到加入的线程执行完成
- 方法响应中断
- 如果获取了锁,是不会释放锁的
sleep
方法定义:public static native void sleep(long millis)
静态方法,表示让线程睡眠一段时间
- 当前线程会阻塞,直到加入的线程执行完成
- 方法响应中断
- 如果获取了锁,是不会释放锁的