Java线程初步了解2-售票系统

来源:互联网 发布:上古卷轴5优化工具 编辑:程序博客网 时间:2024/06/05 16:06

在1中感觉引用Runnable接口的方法比直接继承Thread的方法好了不少这次就试着用这个。

首先创建一个类他引用Runnable接口


这个售票系统很简单就是有100张票,开启不同的数字去减少知道数字为0.为止

public class sale implements Runnable {    //定义100张票    private  static  int c=100;    Object obj1 = new Object();    public void run(){    //卖完票就结束线程的运行        while(c>0){                System.out.println(Thread.currentThread()+""+c);                c--;            }            }    public static void main(String[] args)  {        sale a= new sale();        Thread t1 = new Thread(a,"a");        Thread t2 = new Thread(a,"b");        t1.start();        t2.start();    }}

这样看起来貌似没什么问题,但当我们让他在进入卖票时候Sleep一下子,会不会出错呢?

public class sale implements Runnable {    private  static  int c=100;    //Object obj1 = new Object();    public void run(){        while(c>0){            //synchronized (obj1) {                //if(c>0){              try {                Thread.sleep(300);            } catch (Exception e) {                // TODO: handle exception            }                System.out.println(Thread.currentThread()+""+c);                c--;            }    }

编译一下是否出错了?
是否有同一张片卖了两次的情况?
为什么会出现这种情况呢?


这是因为在运行的时候,因为一个线程被限制,导致其他线程进入同时运行一个数据导致的。那么怎么才能解决这个问题呢?
这就要用到线程中的锁,同步来解决这个问题了。
Java线程初步了解3——锁,同步

0 0
原创粉丝点击