当前页面: 开发资料首页 → 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