求助大神,关于对多线程的理解,有例子!
package ShangXueTangThread;
/**
* 方便共享资源
* @author Administrator
*
*/
public class Web12306Demo implements Runnable {
private int num =50;
@Override
public void run() {
while(true){
if(num<=0){
break; //跳出循环
}
System.out.println(Thread.currentThread().getName()+"抢到了"+num);
num--;
}
}
public static void main(String[] args) {
//真实角色
Web12306Demo web = new Web12306Demo();
//代理
Thread t1 =new Thread(web,"路人甲");
Thread t2 =new Thread(web,"黄牛已");
Thread t3 =new Thread(web,"攻城师");
//启动线程
t1.start();
t2.start();
t3.start();
}
}
上面这个例子,在打印的时候,出现了这样的情况,
攻城师抢到了3
攻城师抢到了2
攻城师抢到了1
黄牛已抢到了8
路人甲抢到了9
这个怎么理解,为什么会出现这种情况,帮忙看看我的理解有什么问题,请指正,多线程里,每个线程里的代码其实也是一行一行由上而下执行的,但是,比如线程一执行到第5行时,CPU暂停执行线程一,线程三开始执行,执行到三的第8行 ,三暂停,线程二执行,然后CPU开始执行线程一的第5行?但是我有个疑问,假设此时num=5,,线程一如果执行完while(true){
if(num<=0){
break; //跳出循环
}
,然后给暂停了,线程三开始执行完整一次循环,num=4,然后线程一再执行System.out.println(Thread.currentThread().getName()+"抢到了"+num);时,打印出来的num应该是5还是4?