AI智能
改变未来

多线程中sleep()和wait()


多线程中sleep()和wait()

Java中的sleep()和wait()方法都可以造成程序等待的状态,这两者的区别是:

​ 1、原理不同。sleep是Thread的静态方法,而wait是object类的成员方法。

​ 2、对锁的处理机制不一样。由于sleep方法主要是让线程休息一段时间,不涉及线程间的通信,因此调用这个方法不会释放锁。而wait方法会释放线程占用的锁。

​ 3、使用区域不同。wait方法必须放在同步控制方法或者同步语句块中使用。而sleep则可在任何地方使用。

调用wait()方法后,当前线程会存入调用该方法的对象的等待池中,直到被唤醒。notify方法是唤醒等待池中的随机一个线程,notifyAll方法唤醒所有,但它们仍要等待CPU调度。

多线程打印AB1CD2…YZ13

public class ThreadPrint {static Object obj = new Object();public static void main(String[] args) {new Thread(() -> {for (int i = 0; i < 26;) {synchronized (obj) {System.out.print((char) (i + 65) + \"\" + (char) (i + 66));i += 2;try {//先唤醒其他线程,自己再等待obj.notify();obj.wait();} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}).start();new Thread(() -> {for (int i = 1; i <= 13; i++) {synchronized (obj) {System.out.print(i);try {//先唤醒其他线程,自己再等待obj.notify();//如果是最后一次,不等待直接出循环if(i!=13) {obj.wait();}} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}).start();}}
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » 多线程中sleep()和wait()