前提有一点你要明白,CPU一次只能执行一个线程,所以这4个线程(不包括main)需要抢夺资源,至于谁抢到,就是CPU说的算。
当这4个线程中一个抢到执行权时,sleep(10)只是对这个线程冻结10毫秒,在这10毫秒的时间,这个线程暂时放弃了执行资格,其他3个有执行资格的线程开始继续抢夺执行权。
当这10毫秒时间过去后,之前被sleep(10)的线程恢复了执行资格,但是没有执行权,也就是毕老师视频里画的图中的”阻塞“状态,等待CPU给他分配执行权。
至于你的问题,我的回答是这样的:
1.只要CPU给了一个线程执行权,并且ticket>0,那么这个线程就会执行sleep(10)。
2.sleep(10)不会永久的冻结下去,10毫秒结束,线程又拥有了执行资格。
PS:实现Runnable接口,是每个线程当中都有一个一模一样的run()方法,并不是共用这个run()方法,只有tick是四个线程共用的数据。
|