1、sleep()方法:
- sleep()方法是Thread类的静态方法,用于使当前线程休眠指定的时间(以毫秒为单位)
- sleep是一种静态休眠,不释放锁,线程将进入阻塞状态,不会参与CPU的分配,直到休眠时间结束或中断
- sleep通常用于线程暂时停止执行,不涉及线程间的通信及协作
2、 yield()方法:
- yield()方法是Thread类的静态方法,用于提示CPU允许其他具有相同优先级的线程运行
- yield()方法是一种线程主动让出CPU使用权的方法,但不能保证其他线程会立即被执行(只是礼貌性的让一下),CPU还是会随机分配时间片
- 通常用于帮助线程调度,但不能用于线程之间的明确通讯
3、wait()、notify() / notifyAll() 方法:
- wait()、notify()、notifyAll()等都是Object类的方法,用于实现线程间的协作通信。
- wait()用于使当前线程等待,(等待的同时,释放共享资源的锁),直到其他线程调用相同对象的notify()或notifyAll()来唤醒。
- notify() 方法:调用任意对象的notify方法会在因调用该对象的wait()方法而阻塞的线程中随机选一个线程解除阻塞,但要等到获得锁之后才可真正执行。
- notifyAll() 方法:调用notifyAll方法会在因调用该对象的wait() 方法而阻塞的线程一次性全部解除阻塞。
- 以上三个方法都是Object类中的final方法,被所有的类继承,但不允许重写,这三个只能在Synchronized的同步代码块中使用,否则会抛出异常,且它们都是用来实现线程之间的同步个协作,例如生产者和消费者的问题。
4、join() 方法:
- join() 方法是Thread类的方法,用于等待另一个线程完成执行
- 当一个线程调用另一个线程的join方法时,它将被阻塞,直到被等待的线程执行完成或超时
- 通常用于等待某个线程完成工作,例如等待子线程完成后再继续执行主线程
总结:
用途不同:
sleep 和 yield 通常用于线程的控制和时间管理
wait、notify、notifyAll、join 用于线程之间的协作和通信