多线程05:初识并发问题
发现问题,多个线程操作同一个资源的情况下,线程不安全,数据紊乱
1 package com.thread.demo01; 2 3 //多个线程同时操作同一个对象 4 //买火车票的例子 5 6 //发现问题,多个线程操作同一个资源的情况下,线程不安全,数据紊乱 7 public class TestThread04 implements Runnable { 8 9 //票数 10 private int ticketNums = 10; 11 12 @Override 13 public void run() { 14 while (true) { 15 if (ticketNums <= 0) { 16 break; 17 } 18 //模拟延时 19 try { 20 Thread.sleep(200); 21 } catch (InterruptedException e) { 22 e.printStackTrace(); 23 } 24 25 System.out.println(Thread.currentThread().getName() + "-->拿到了" + ticketNums-- + "票"); 26 } 27 } 28 29 public static void main(String[] args) { 30 TestThread04 ticket = new TestThread04(); 31 32 new Thread(ticket, "小红").start(); 33 new Thread(ticket, "老师").start(); 34 new Thread(ticket, "黄牛").start(); 35 } 36 } 37 38 结果: 39 黄牛-->拿到了9票 40 小红-->拿到了10票 41 老师-->拿到了9票 42 小红-->拿到了8票 43 黄牛-->拿到了7票 44 老师-->拿到了6票 45 黄牛-->拿到了5票 46 小红-->拿到了4票 47 老师-->拿到了4票 48 黄牛-->拿到了3票 49 老师-->拿到了1票 50 小红-->拿到了2票