sleep()和wait()的异同
相同点:一旦执行方法,都可以使得当前的线程进入阻塞状态.
不同点:①两个方法声明的位置不同:Thread类中声明sleep(),Object类中声明wait()
② 调用的要求不同:sleep()可以在任何需要的场景下调用.wait()必须使用在同步代码块或 者同步方法中
③关于是否释放同步监视器:如果两个方法都使用在同步代码块或同步方法中,sleep()不会释 放锁,wait()会释放锁
给线程起名的另一种方法:建立带参的构造器
yield():暂停当前正在执行的线程对象,即 放弃当前拥有的cup资源,并执行其他线程
yield()将导致线程从运行状态转到可运行状态,但有可能没有效果
join() :在线程a中调用线程b的join(),此时线程a进入阻塞状态,知道线程b完全执行完以后,线程a才结束阻塞状态
wait():一旦执行此方法,当前线程就进入阻塞状态,并释放同步监视器
notify():一旦执行此方法,就会唤醒被wait的一个线程,优先级高的优先
notifyAll():一旦执行此方法,就会唤醒所有被wait的线程
注意事项
1.wait(), notify(), notifyAll() 三个方法必须使用在同步代码块或者同步方法中
2.这三个方法的调用者必须是同步代码块或者同步代码中的同步监视器,否则会出现异常
3.wait(), notify(), notifyAll() 定义在java.ong.Object里面