JAVA版本,线程三:线程实现卖票程序

PS.名字什么的不重要,改成了糖果,效果是一样的。
不考虑顺序的卖票线程程序,线程不安全模式
将票改成了糖果:

/*
线程加强:让四个小朋友跑步抢一百颗糖,一次只能拿一颗,先跑到了就拿到糖,然后重新开始跑。(PS:糖吃多了会长虫牙)
 */
public class CandyDemo {
    public static void main(String[] args) {
         //创建对象,代表四个小朋友
        //同时让四个小朋友看到共享的一百颗糖
        Candys c1=new Candys();
        Candys c2=new Candys();
        Candys c3=new Candys();
        Candys c4=new Candys();
        //创建四个线程,代表小朋友的行为
        //使用直接创建名字的构造方法,Thread类中,可以直接指定名字构造
        Thread t1=new Thread(c1,"小明");
        Thread t2=new Thread(c2,"小刚");
        Thread t3=new Thread(c3,"小华");
        Thread t4=new Thread(c4,"小萌");
                                                //ps.童年四大阴影
        //开启线程,活动开始
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}

//代表线程的类---描述抢糖的过程
//一般使用实现Runnable接口
//也可以代表小朋友类,因为是小朋友在抢糖,属于对象的方法
class Candys implements Runnable{
    //由于糖果总共只有一百颗,所以需要将总数定义为公共使用数据,让所有人公用这个数据
    static int candy=100;      
    //重写方法---抢糖的过程
    @Override
    public void run() {
        //如果糖没有抢完,就继续活动
        while (candy!=0){
            //抢走一颗糖,就糖减一
            candy--;
            //通告谁拿到了糖,还剩多少糖
            //使用Thread.currentThread()--放回当前正在执行的线程
           
            System.out.println(Thread.currentThread().getName()
                    +"抢到了糖,还剩"+candy+"颗糖……");
        }
        if (candy<= 0) {
            System.out.println("糖抢完了,左上角关注+1");
        }
    }
}

运行结果:
JAVA版本,线程三:线程实现卖票程序_第1张图片
但是线程的顺序不能保证,线程不安全,想要保证数据的顺序,需要加锁,加锁看第四篇:
下一篇:
JAVA版本,线程四:线程实现卖票程序(加锁,线程数据有顺序,安全顺序)

关联篇幅:
JAVA版,线程初级入门案例一:继承Thread类创建线程
JAVA版线程基础案例二:实现Runnable完成线程

你可能感兴趣的:(java初级)