黑马程序员技术交流社区
标题:
大家帮我看看为什么会输出这样的结果?
[打印本页]
作者:
江南雨
时间:
2013-5-26 18:48
标题:
大家帮我看看为什么会输出这样的结果?
本帖最后由 江南雨 于 2013-5-26 18:50 编辑
public class Operation {
private int [] a=new int[10];
int pcount=0,tcount=0;
int count=0;
public Operation(){
}
public synchronized void put(int x) throws InterruptedException{
while(count==10){
wait();
}
a[pcount]=x;
System.out.println("put:a["+pcount+"]"+"="+x);
if(++pcount==10){
pcount=0;
}
++count;
notify();
//Thread.currentThread().sleep(10);
}
public synchronized void take() throws InterruptedException{
while(count==0){
wait();
}
int x=a[tcount];
System.out.println("take:a["+tcount+"]"+"="+x);
if(++tcount==10){
tcount=0;
}
count--;
notify();
//Thread.currentThread().sleep(10);
}
}
public class MyThread1 implements Runnable {
Operation op;
public MyThread1(Operation op){
this.op=op;
}
@Override
public void run() {
while(true){
int x=(int)( Math.random()*10+1);
try {
op.put(x);
//Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class MyThread2 implements Runnable {
Operation op;
public MyThread2(Operation op){
this.op=op;
}
@Override
public void run() {
while (true) {
// TODO Auto-generated method stub
try {
op.take();
//Thread.currentThread().sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
public class MainClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
Operation op=new Operation();
Thread mythread1=new Thread(new MyThread1(op));
Thread mythread2=new Thread(new MyThread2(op));
mythread1.start();
mythread2.start();
}
}
运行结果:这个运行结果不是应该从a[0]=x开始吗?
put:a[7]=10
put:a[8]=8
put:a[9]=2
put:a[0]=3
put:a[1]=8
put:a[2]=8
put:a[3]=9
put:a[4]=1
take:a[5]=8
take:a[6]=1
take:a[7]=10
take:a[8]=8
take:a[9]=2
take:a[0]=3
take:a[1]=8
take:a[2]=8
take:a[3]=9
take:a[4]=1
put:a[5]=5
put:a[6]=4
put:a[7]=10
put:a[8]=4
put:a[9]=10
put:a[0]=4
put:a[1]=3
put:a[2]=8
put:a[3]=4
put:a[4]=9
take:a[5]=5
take:a[6]=4
take:a[7]=10
take:a[8]=4
take:a[9]=10
take:a[0]=4
take:a[1]=3
take:a[2]=8
take:a[3]=4
take:a[4]=9
put:a[5]=1
put:a[6]=8
put:a[7]=9
put:a[8]=4
put:a[9]=4
put:a[0]=7
put:a[1]=8
put:a[2]=1
put:a[3]=2
put:a[4]=1
take:a[5]=1
take:a[6]=8
take:a[7]=9
take:a[8]=4
take:a[9]=4
take:a[0]=7
take:a[1]=8
take:a[2]=1
take:a[3]=2
take:a[4]=1
put:a[5]=3
put:a[6]=6
put:a[7]=7
put:a[8]=9
put:a[9]=9
put:a[0]=7
put:a[1]=5
put:a[2]=7
put:a[3]=2
put:a[4]=6
take:a[5]=3
take:a[6]=6
take:a[7]=7
take:a[8]=9
take:a[9]=9
take:a[0]=7
take:a[1]=5
take:a[2]=7
take:a[3]=2
take:a[4]=6
put:a[5]=6
put:a[6]=4
put:a[7]=6
put:a[8]=8
put:a[9]=2
put:a[0]=3
put:a[1]=10
put:a[2]=1
put:a[3]=8
put:a[4]=5
take:a[5]=6
take:a[6]=4
take:a[7]=6
take:a[8]=8
take:a[9]=2
take:a[0]=3
take:a[1]=10
take:a[2]=1
take:a[3]=8
take:a[4]=5
put:a[5]=6
put:a[6]=3
put:a[7]=9
put:a[8]=2
put:a[9]=6
put:a[0]=6
put:a[1]=8
put:a[2]=8
put:a[3]=7
put:a[4]=5
take:a[5]=6
take:a[6]=3
take:a[7]=9
take:a[8]=2
take:a[9]=6
take:a[0]=6
take:a[1]=8
take:a[2]=8
take:a[3]=7
take:a[4]=5
put:a[5]=7
put:a[6]=2
put:a[7]=9
put:a[8]=9
put:a[9]=4
put:a[0]=10
put:a[1]=2
put:a[2]=1
put:a[3]=2
put:a[4]=2
take:a[5]=7
take:a[6]=2
take:a[7]=9
take:a[8]=9
take:a[9]=4
take:a[0]=10
take:a[1]=2
take:a[2]=1
take:a[3]=2
take:a[4]=2
put:a[5]=7
put:a[6]=6
put:a[7]=8
put:a[8]=8
put:a[9]=9
put:a[0]=8
put:a[1]=4
put:a[2]=8
put:a[3]=7
put:a[4]=1
take:a[5]=7
take:a[6]=6
take:a[7]=8
take:a[8]
复制代码
上面的运行结果只是其中的一部分;运行多次后出现的结果
作者:
韩明海
时间:
2013-5-26 20:03
我的运行结果确实是从0开始的,
put:a[0]=10
take:a[0]=10
put:a[1]=4
take:a[1]=4
put:a[2]=10
put:a[3]=6
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2