线程的 run()和 start()有什么区别?sleep() 和 wait() 有什么区别?

微信搜索《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() 方法会释放对象锁

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页