Java 中 sleep() 与 wait() 的区别
# Java 中 sleep() 与 wait() 的区别
两者都可以暂停线程的执行。区别如下:
sleep() | wait() | |
---|---|---|
不让出锁 | 让出锁 | |
使用场景 | 用于暂停执行 | 用于线程间交互/通信 |
唤醒方式 | 线程会自动苏醒。或者可以使用 wait(long timeout)超时后线程会自动苏醒 | 需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法 |
yield() 和 join() 你了解吗?
yield() | join() | |
---|---|---|
描述 | 调用yield方法,会给线程调度器一个当前线程愿意让出CPU使用的暗示,但是线程调度器可能会忽略这个暗示。 | 在线程A中调用线程B.join(),那么线程A会等待,cpu时间片给线程B执行,让线程B先执行,然后A再执行。 |
使用场景 | 很少使用 | 使异步执行的线程变成同步执行,底层是wait方法 |
public class JoinTest {
public static void main(String[] args) {
Thread t = new Thread(new ThreadImp());
t.start();
try {
t.join(1000);//主程序等待t结束,只等1s
if(t.isAlive()){
System.out.println("t has not finished");
}else{
System.out.println("t has finished");
}
System.out.println("Joinfinished");
} catch (Exception e) {
System.out.println(e);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
编辑 (opens new window)
上次更新: 2022/05/19, 21:26:01