下面的程序是建立三个线程,每个线程调用的是同一个BallPickUp对象中的run方法,访问的是同一个balls的实例,所有三个线程共捡了100个球。
但是并不明白程序运行的流程是怎样的,三个线程是如何交替执行的
package renwu1;
public class PEClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
BallPickUp bp=new BallPickUp();
Thread p1=new Thread(bp);
Thread p2=new Thread(bp);
Thread p3=new Thread(bp);
p1.start();
p2.start();
p3.start();
try{
p1.join();
p2.join();
p3.join();
}catch(InterruptedException e){
e.printStackTrace();
}
System.out.println("捡完球,去吃饭");
}
}
package renwu1;
public class BallPickUp implements Runnable {
private int balls=100;
@Override
public void run() {
// TODO Auto-generated method stub
for(int i=0;i<100;i++){
try{
Thread.sleep(1000);
}catch(InterruptedException e){
e.printStackTrace();
}
if(this.balls>0){
System.out.println(Thread.currentThread().getName()+
"同学捡了第"+this.balls--+"个篮球");
}
}
}
}