你定义了两个Resource类的对象,可以这样分析一下,
先分别给两个Resource类的对象命名一下,一个是Resource A ,一个是Resource B;
简称一下线程,一个是线程input,一个是线程output
input线程先启动,给A 设置进去了name和age的值,然后就wait等着output线程来取,
可是,output线程已启动却是等着取出B的值,
它们将一直等下去,因为不会有线程给B设置,也不会有线程去取A的值
所以,把main方法里的代码修改如下:
Resource res = new Resource(); //创建一个Resource对象让两个线程去操作,否则你定义的synchronized同步方法没有意义嘛!
new Thread(new Input(res)).start();
new Thread(new Output(res)).start();
另外,唤醒线程的方法,尽量不要用notify;要用notifyAll,因为线程都是线程调度器来调用的,你是控制不了的,所以用notify有时会出问题 |