Java基础学习:多线程06


Java基础学习:多线程06

  • 初始并发问题:

    • 多个线程操作同一个资源的情况下,线程不安全了,数据紊乱;

  • 代码案例:抢火车票

    ?
    /**
    * 多个线程同时操作同一个对象:
    *
    * 买火车票:出现了并发
    *
    * 发现问题:多个线程操作同一个资源的情况下,线程不安全了,数据紊乱;
    */
    public class TestThread05 implements Runnable {
    ?
       //票数
       private int ticketNums=10;
    ?
       //重写run()方法:
       @Override
       public void run() {
           //线程体:取票
           while(true){
               if(ticketNums<=0){
                   break;//退出循环
              }
               try {
                   Thread.sleep(500);//模拟延时
              } catch (InterruptedException e) {
                   e.printStackTrace();
              }
               System.out.println(Thread.currentThread().getName()+"-->拿到了第"+ticketNums--+"票");
          }
    ?
      }
    ?
       //主线程
       public static void main(String[] args) {
    ?
           TestThread05 t1=new TestThread05();
    ?
           new Thread(t1,"小明").start();
           new Thread(t1,"老师").start();
           new Thread(t1,"黄牛党").start();
    ?
    ?
      }
    }
    ?
    /*
    老师-->拿到了第10票
    黄牛党-->拿到了第10票
    小明-->拿到了第10票
    黄牛党-->拿到了第9票
    小明-->拿到了第9票
    老师-->拿到了第8票
    黄牛党-->拿到了第7票
    小明-->拿到了第6票
    老师-->拿到了第5票
    老师-->拿到了第4票
    黄牛党-->拿到了第3票
    小明-->拿到了第2票
    老师-->拿到了第1票
    小明-->拿到了第-1票
    黄牛党-->拿到了第0票
    ?
    */
    ?