线程

下面的程序是建立三个线程,每个线程调用的是同一个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--+"个篮球");
}
}
}
}

原文地址:https://www.cnblogs.com/bfstone/p/6207112.html