我写这个程序目的:
1,实现数字在0到10之间来回递增或者递减,到数字递增到10时,数字开始
递减到0;当数字递减到0时开始递增到10,依次循环;
2,实用同步实现
3,理解多线程的原理
程序运行后的错误:
st:2
st:3
st:4
st:5
st:6
st:7
st:8
st:9
windows:0
st:10
//程序停在这儿就不动了!!
我的问题:
1,在执行RUN之间的代码,两个线程都是从1开始,为何i的值没发生改变
2,我的错误在哪?
3,out()方法中的notifyall没有执行!!源代码如下

class Number10 implements Runnable{
private  int i=1;
public void run(){
synchronized(this){
while(true){

if (Thread.currentThread().getName().equalsIgnoreCase("st"))
{
input();
}
else if(Thread.currentThread().getName().equalsIgnoreCase("windows"))
{
out();
}

System.out.println(Thread.currentThread().getName() + ":" +i);

}
}
}
public  void out(){
if(i==0)
{
try {
wait();
    }
    catch (java.lang.InterruptedException ex) {
     ex.printStackTrace();
    }
     }
    
i--;
//notifyAll();
}
public void input(){
if(i==10)
{
try {
wait();
    }
    catch (java.lang.InterruptedException ex) {
     ex.printStackTrace();
    }
}
i++;
    notifyAll();
}
public static void main(String [] args){
Thread st=new Thread(new Number10());
st.setName("st");
Thread windows=new Thread(new Number10());
windows.setName("windows");
st.start();
windows.start();
}
}

解决方案 »

  1.   

    ThreadTest tt=new ThreadTest();
    Thread st = new Thread(tt);
    st.setName("st");
    Thread windows = new Thread(tt);
    windows.setName("windows");
    st.start();
    windows.start();输出:
    windows:1
    windows:0
    st:1
    st:2
    st:3
    st:4
    st:5
    st:6
    st:7
    st:8
    st:9
    st:10
    windows:9
    windows:8
    windows:7
    windows:6
    windows:5
    windows:4
    windows:3
    windows:2
    windows:1
    windows:0
    st:1
    st:2
    st:3
    st:4
    st:5
    st:6
    st:7
    st:8
    st:9
    st:10
    windows:9
    windows:8
    windows:7
    windows:6
    windows:5
    windows:4
    windows:3
    windows:2
    windows:1
    windows:0