• 三个窗口卖票(实现Runnable方式创建线程)之线程安全问题


     1 package day2_4;
     2 
     3 /**
     4  * 例子:创建三个窗口卖票,总票数为100张,使用实现Runnable接口
     5  * 因为三个线程是共享Window2对象的,所以也是共享ticket变量的,自然就不用static修饰 ticket了
     6  * 仍存在线程安全问题,待解决(还是会有多个线程卖出少量的相同号的票)
     7  *
     8  * @Author Tianhao
     9  * @create 2021-02-04-14:36
    10  */
    11 
    12 class Window2 implements Runnable {
    13     //可以不用static 修饰 ticket了
    14     private int ticket = 100;
    15 
    16     @Override
    17     public void run() {
    18 //        while (ticket>0) {
    19 //            System.out.println(Thread.currentThread().getName() + "卖票,票号:" + ticket);
    20 //            ticket--;
    21 //        }
    22 
    23         while (true) {
    24             if (ticket > 0) {
    25                 try {
    26                     Thread.sleep(100);
    27                 } catch (InterruptedException e) {
    28                     e.printStackTrace();
    29                 }
    30                 System.out.println(Thread.currentThread().getName() + "卖票,票号:" + ticket);
    31                 ticket--;
    32             } else {
    33                 break;
    34             }
    35         }
    36     }
    37 }
    38 
    39 
    40 public class WindowTest2 {
    41     public static void main(String[] args) {
    42         Window2 w = new Window2();
    43         //Thread构造器内都是同一个Window2对象w,所以共享ticket成员变量
    44         Thread t1 = new Thread(w);
    45         Thread t2 = new Thread(w);
    46         Thread t3 = new Thread(w);
    47         t1.setName("窗口1");
    48         t2.setName("窗口2");
    49         t3.setName("窗口3");
    50         t1.start();
    51         t2.start();
    52         t3.start();
    53 
    54     }
    55 }
  • 相关阅读:
    Cannot find module 'express'
    txt简单写入
    URLRewriter 伪静态配置Demo
    利用css的sticky特性实现固定首列其他列滚动
    金数据表单接口请求(php)
    Android应用app数据请求捕捉三步走
    go语言模块开发概念与cron定时事务模块的使用
    万维网的发明
    UEditor扩展又拍云图片存储功能实践
    Html5+移动端小应用分享(得见)
  • 原文地址:https://www.cnblogs.com/zui-ai-java/p/14377415.html
Copyright © 2020-2023  润新知