站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题0到10之间数自动增减,关于多线程的问题??

0到10之间数自动增减,关于多线程的问题??

摘要: 0到10之间数自动增减,关于多线程的问题??


我写这个程序目的:
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(-#34;st-#34;))
{
input();
}
else if(Thread.currentThread().getName().equalsIgnoreCase(-#34;windows-#34;))
{
out();
}

System.out.println(Thread.currentThread().getName() + -#34;:-#34; +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(-#34;st-#34;);
Thread windows=new Thread(new Number10());
windows.setName(-#34;windows-#34;);
st.start();
windows.start();
}
}



ThreadTest tt=new ThreadTest();
Thread st = new Thread(tt);
st.setName(-#34;st-#34;);
Thread windows = new Thread(tt);
windows.setName(-#34;windows-#34;);
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


↑返回目录
前一篇: 如何把一个short数放到一个byte[2]的数组里去?
后一篇: 问一个正则表达式的问题