在网上看到的所有关于java多线程的例子都是用一个实现Runnable接口,然后用这个类实例化一个对象,然后用这个对象作为参数传递给多个Thread对象。实现了Runnable接口的这个类里面写有wait(),notify()。
如果我这么写, 用一个类继承Thread,然后实例化这个类的多个对象,这些对象之间是不是不能相互wait和notify?

解决方案 »

  1.   

    这要看你怎么设计了,如果没有特殊的设计,这多个实例的wait和notify是相互独立的。
    wait和notify是object的方法,他们是从object继承的。
      

  2.   

    用java 写写生产者 消费者问题,哲学家问题,你会有自己的理解 的
      

  3.   

    不行的,各个对象之间是相互独立的,想要用自身的wait()和notify()方法来控制其他实例是不行的。不管是实现Runnable接口还是继承Thread类都不行,这两种方法没有本质上的区别。况且wait()和notify()也跟Thread无关,而是Object的方法。
      

  4.   

    求一个通过继承Thread,而且使用wait和notify的例子
      

  5.   

    额,我想错了,我以为你说的是构造不同的实现Runnable接口的类的对象来传给Thread的构造方法使用wait()和notify(),糊涂了。
    对于你说的,实例多个Thread类的子类的对象来使用wait()和notify()方法,跟实现Runnable接口是没有区别的。
    至于例子,你把生产者和消费者问题实现Runnable接口的例子改成继承Thread类就可以了。
      

  6.   

    package pcenshao.w_n.demo;public class Test { public static void main(String[] args) throws InterruptedException {
    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);
    }}