Runnable并发问题(火车票练习)

Posted 小郑要做干饭人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Runnable并发问题(火车票练习)相关的知识,希望对你有一定的参考价值。

package com.zzx.线程.Runnable;

/**
 * @date: 2022/08/15/ 23:13
 * @author: ZhengZiXuan
 * @title: 多个线程操作同一个对象
 * @description: 买火车票的例子
 */
public class RunnableTest01 implements Runnable

    //票数
   private int ticketNums = 10;

    public void run() 
        while (true)
            if (ticketNums <= 0)
                break;
            
            //模拟延时
            try 
                Thread.sleep(200);
             catch (InterruptedException e) 
                e.printStackTrace();
            
            System.out.println(Thread.currentThread().getName()+"==>拿到了第"+ ticketNums-- + "张火车票");
        
    

class test
    public static void main(String[] args) 
        RunnableTest01 runnableTest01 = new RunnableTest01();
        new Thread(runnableTest01,"张三").start();
        new Thread(runnableTest01,"李四").start();
        new Thread(runnableTest01,"王五").start();
    


控制台运行结果如下:

发现问题:通过运行发现,多个线程同时执行时,有几率会操作同一个资源,线程不安全,数据紊乱

既上面问题做了一个新的程序进行优化

以上是关于Runnable并发问题(火车票练习)的主要内容,如果未能解决你的问题,请参考以下文章

进程锁

Python练习(day9)

创建三个窗口卖票,总票数为100张 .使用Runnable接口的方式

java-利用多线程Runnable,公用一个参数问题

Java学习多线程:线程创建线程状态线程同步线程通信全总结

Linux系统编程-(pthread)线程通信(互斥锁)