微信搜索《Java鱼仔》,每天一个知识点不错过
(一)每天一个知识点
线程的 run()和 start()有什么区别?sleep() 和 wait() 有什么区别?
(二)回答
2.1 线程的 run()和 start()有什么区别?
start()方法是Thread类的一个方法,通过调用start()方法可以启动一个线程,这时被启动的线程就会进入就绪状态,等分配到CPU时间片后就会执行线程里的run()方法。
run()只是线程中的一个执行方法,如果不用start()启动该线程,run方法就不会执行。
总结成一句话:start()就像在食堂排队,run()就像排到队后吃饭。
2.2 sleep() 和 wait() 有什么区别?
sleep() 方法是线程类(Thread)的静态方法,让调用线程进入睡眠状态,让出执行机会给其他线程,等到休眠时间结束后,线程进入就绪状态和其他线程一起竞争cpu的执行时间。
因为sleep() 是static静态的方法,他不能改变对象的机锁,当一个synchronized块中调用了sleep() 方法,线程虽然进入休眠,但是对象的机锁没有被释放,其他线程依然无法访问这个对象。
wait()是Object类的方法,当一个线程执行到wait方法时,它就进入到一个和该对象相关的等待池,同时释放对象的机锁,使得其他线程能够访问,可以通过notify,notifyAll方法来唤醒等待的线程
sleep() 和 wait() 的区别就是 调用sleep方法的线程不会释放对象锁,而调用wait() 方法会释放对象锁