为什么Thread类的sleep和yield()方法是静态的

请问怎么回答

全部评论
The code would only execute when someXThread was executing, in which case telling someYThread to yield would be pointless. So since the only thread worth calling yield on is the current thread, they make the method static so you won't waste time trying to call yield on some other thread . 这是stackoverflow上的回答。是说,该代码只有在某个A线程执行时会被执行,这种情况下通知某个B线程yield是无意义的(因为B线程本来就没在执行)。因此只有当前线程执行yield才是有意义的。通过使该方法为static,你将不会浪费时间尝试yield 其他线程。 讲得很清楚,就是说,如果是和线程实例绑定的话,你可能会在当前线程中尝试调用otherThread.yeild()/sleep(), 而这使没有意义的
3 回复
分享
发布于 2016-09-17 09:19
我觉得这里不应该理解为静态的,而是理解为属于类方法而不是实例方法。因为这个方法作用是使当前线程休眠,而与具体线程类实例无关,所以其实要是专门弄个工具类来放这些方法其实是更合理的,类似于Math类里的max()这种。我个人看法,欢迎拍砖。
点赞 回复
分享
发布于 2016-09-16 00:17
滴滴
校招火热招聘中
官网直投
如果是实例方法的话,意味着别的线程可以调用此线程的方法(使此线程sleep),会造成一些问题
点赞 回复
分享
发布于 2016-09-15 22:17
因为这两个方法是针对于处于running状态的thread的,静态方法直接让目前正在运行的现程wait,不让处于等待状态的线程调用该方法
点赞 回复
分享
发布于 2016-09-16 10:09
上面回答是对的,只能自己调自己
点赞 回复
分享
发布于 2016-09-17 10:27

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务