Thread类中的start()和run()方法有什么区别?为什么wait和notify方法要在同步块中调用?

2021年9月27日 171点热度 0人点赞 0条评论
一、Thread类中的start()和run()方法有什么区别?

start()方法被用来启动新创建的线程,而且start()内部调用了run()方法,这和直接调用run()方法的效果不一样。当你调用run()方法的时候,只会是在原来的线程中调用,没有新的线程启动,start()方法才会启动新线程 。

二、为什么wait, notify和notifyAll这些方法不在thread类里面?

明显的原因是JAVA提供的锁是对象级的而不是线程级的,每个对象都有锁,通过线程获得。如果线程需要等待某些锁那么调用对象中的wait()方法就有意义了。如果wait()方法定义在Thread类中,线程正在等待的是哪个锁就不明显了。简单的说,由于wait,notify和notifyAll都是锁级别的操作,所以把他们定义在Object类中因为锁属于对象 。

三、为什么wait和notify方法要在同步块中调用?

支付 ¥1.99 购买本节后解锁剩余65%的内容

小小调酒师

此刻打盹,你将做梦; 此刻学习,你将圆梦。

文章评论