public class ThreadTest3 {
public static void main(String[] args) throws InterruptedException {

new MyThread();
MyThread mt = new MyThread();
Thread t = new Thread(mt);
t.start();

for(int i = 0;i < 20; i++){
System.out.println("我是主线程。i:  " + i);
Thread.sleep(1000);
if(i == 10){new MyThread().call();}
}
}
}class MyThread implements Runnable{
Thread th1; public void run() {
for(int i = 0;i < 10;i++){
System.out.println("我是二线程。i:  " + i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if(i == 5){
wat();
}
}

} public synchronized void call()
notifyAll();
}

public synchronized void wat(){
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}

}

解决方案 »

  1.   

               if(i == 10){new MyThread().call();}
     这一行一直报错,为什么呢?
      

  2.   

    少了一个括号
        public synchronized void call()
            notifyAll();
        }
      

  3.   

    t线程wait在mt对象上,但是new MyThread().call();每次都在new新的对象,用的不是一个monitor
      

  4.   

    楼上的,直接写成t.call();这个直接不能编译,为什么啊?
      

  5.   


    public class ThreadTest3 {
        public static void main(String[] args) throws InterruptedException {
            
            new MyThread();
            MyThread mt = new MyThread();
            Thread t = new Thread(mt);        
            t.start();                        
            
            for(int i = 0;i < 20; i++){
                System.out.println("我是主线程。i:  " + i);
                Thread.sleep(1000);
                if(i == 10){
                 mt.call();
                }
            }
        }
        }class MyThread implements Runnable{
        public void run() {
            for(int i = 0;i < 10;i++){
                System.out.println("我是二线程。i:  " + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if(i == 5){
                    this.wat();
                }
            }
        }        public synchronized void call(){
            this.notifyAll();
        }
        
        public synchronized void wat(){
            try {
                this.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }