在网上看到的所有关于java多线程的例子都是用一个实现Runnable接口,然后用这个类实例化一个对象,然后用这个对象作为参数传递给多个Thread对象。实现了Runnable接口的这个类里面写有wait(),notify()。
如果我这么写, 用一个类继承Thread,然后实例化这个类的多个对象,这些对象之间是不是不能相互wait和notify?
如果我这么写, 用一个类继承Thread,然后实例化这个类的多个对象,这些对象之间是不是不能相互wait和notify?
解决方案 »
- MySql的驱动问题 求解
- Java 编写编译器可行性及建议。
- JAVA新手应该怎么做?????
- 使用200分来解决struts中的switchaction跳转模块的错误,我有一个RAR文件,求帮忙。使用200分来解决struts中的switchaction跳转模块的错
- 关于类继承时方法和属性的问题
- Collection如何删除一个对象?
- 各位大哥,小弟我刚学JAVA,有几个问题请教一下:
- 求Java数据结构和算法(第二版)电子版下载地址
- java有没有类似msdn的帮助文档?叫什么名称?在那里下载?
- 如何让Applet里的控件随着Applet大小改变而一直占满整个Applet呢?
- 列名 'kshj' 无效
- Java实现解压文件并搜索
wait和notify是object的方法,他们是从object继承的。
对于你说的,实例多个Thread类的子类的对象来使用wait()和notify()方法,跟实现Runnable接口是没有区别的。
至于例子,你把生产者和消费者问题实现Runnable接口的例子改成继承Thread类就可以了。
final T t1 = new T();
t1.setName("t1");
t1.start();
T t2 = new T(){
@Override
public void run() {
while(true){
synchronized (t1) {
t1.notify(); //唤醒在监视器上t1等待第一个线程
p("t1.nofity()");
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
t2.setName("t2");
t2.start();
}
static class T extends Thread{ @Override
public void run() {
while(true){
p("running");
synchronized (this) {
try {
p("waiting for notify ...");
this.wait();
p("notified");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
static void p(String s){
System.out.println("thread:" + Thread.currentThread().getName() +"," + s);
}}