sleep() 方法
- sleep 是 Thread 类的静态方法
- sleep 方法不会释放锁,它只是让线程阻塞一段时间。由于不会释放锁,所以容易造成死锁。
- sleep 方法可以在任何地方使用,但必须捕获异常。
wait() 方法
- wait 是 Object 类的方法,用于线程间的通信,调用 wait 方法可以阻塞当前线程,并释放锁,直到其他线程调用 notify 或 notifyAll 方法才会苏醒。
- wait 和 notify 方法必须放在同步代码块中使用,不需要捕获异常。
notify() 方法
- 调用 notify 方法后,会唤醒该共享变量上由于调用 wait 方法而被挂起的一个线程。notifyAll 则会唤醒所有因 wait 方法被挂起的线程。
- 被唤醒的线程必须等待调用 notify 的线程释放锁后,才能和其他线程一起竞争该锁,只有竞争成功了,被唤醒的线程才能继续执行。
wait - notify 的详细流程:
A线程获取对象的锁 → 调用对象的wait方法 → A线程放弃锁并进入阻塞状态 → 随后B线程获取到了这个锁,并调用对象的notify方法 → A线程从阻塞状态变为就绪状态 → B线程释放锁后,A线程竞争获取到锁,并从wait方法返回,继续执行。
yield() 方法
- yield 方法只会给优先级相同或更高的线程执行机会。
- 调用 yield 方法只会使线程让出自己的时间片,并没有被阻塞,线程会重新回到就绪状态,下一次线程调度依然有机会再次执行。
- 调用 yield 方法不需要捕获异常。
join() 方法
- 在A线程中调用B线程的join()方法,表示只有当B线程执行完毕时,A线程才能继续执行。
本文深入探讨Java中线程控制的关键方法,包括Thread类的sleep()方法、Object类的wait()和notify()方法,以及Thread类的yield()和join()方法。详细解析这些方法在多线程环境中的作用与应用,帮助读者理解线程间通信和同步机制。
806

被折叠的 条评论
为什么被折叠?



