多线程的sleep和wait

来源:互联网 发布:男士西服知乎 编辑:程序博客网 时间:2024/06/10 17:20

sleep 方法 和 wait 方法

sleep 是占着cpu睡觉,(更通俗的说是继续占着毛坑,但在一定时间段内暂停拉屎)。当前线程 sleep 时,该线程继续持有资源和cpu执行权,其它线程不允许拥有cup。若不发生InterruptedException,该线程的沉睡时间是确定的,传入多少毫秒就是多少毫秒。沉睡时间一过,继续接着上次再执行(继续拉)。

sleep是静态方法,谁调用谁睡觉。就算在main线程里调用了A线程的sleep()方法,而实际上还是main线程在睡觉。如果要让线程A去睡觉,必须在A的代块中调用sleep方法。

wait() 方法往往与notify 或 notifyAll成对出现。当前线程调用它时,该线程释放所持有的资源(即让出资源)和cup执行权,转移到线程池中等待,此时其它线程可以获得cpu执行权。当某个正在执行的线程调用notify 或 notifyAll时,将它或其它的同在线程池中的所有线程唤醒,它们共同进入就绪序列等待os(操作系统)分配资源。

wait( long n ), Cause the current thread to wait nutil either another thread invokes notify() or notifyAll() method for this object, or a specified amount time has elapsed.

当前线程调用 wait( long n ) 方法时,其它的线程可以将其唤醒,回到就绪序列中等待os分配资源,即使未到指定的时间(即传入的参数n )也可以。如果未notify或notifyAll,在指定时间一到也可以加到就绪序列,等待os分配资源。

原创粉丝点击