日期:2014-05-20  浏览次数:20764 次

为什么wait()要写在Object里 不写在Thread里? 求助大神们
我初级小菜鸟,觉得wait()方法一般是在继承Thread的类中调用,为什么就不直接写成Thread发放,难道是因为实现Runnable的类中无法调用wait(),我觉得不是吧!我水平太差,问的问题也就这水平了,大神求帮忙!

------解决方案--------------------
这个涉及到wait什么的问题。
等的是某个对象上的锁,大家(多个线程)竞争这个锁,是吧,
wait和notify方法都放到目标对象上,那这个对象上可以维护线程的队列,可以对相关线程进行调度。
(方法和方法所操纵的数据要在一起)

如果将wait方法和线程队列都放到Thread中,那么就必然要求某个Thread知道其他所有Thread的信息,(大家都要相互知道),这合理吗?很容易出问题的。
------解决方案--------------------
wait()方法是Object类中就定义了的方法,只要是一个类,就有可能在多线程中wait()来等待其他线程。这个就是java标准的机制。

而wait()方法,必须在多线程类创建实例之后,才能调用。

Thread类实现了Runnable接口而又继承自Object类,

只要实现了Runnable接口的类,都能启多线程。

要使用多线程就得实现Runnable接口,Thread仅仅是SUN公司给你提供的一个标准的线程类的特殊类,供你使用。