zoukankan      html  css  js  c++  java
  • 6.18Java多线程同步方法实现DemoNo2

    6.18Java多线程同步方法实现DemoNo2

    使用同步方法重写购票demo

    package iostudy.synchro;

    /**
    * 模拟买火车票
    */
    public class Happy12306 {
       public static void main(String[] args) {

           /*实例化资源类*/
           Web12306 web12306 = new Web12306(4, "Happy!");

           /*实例化代理对象*/
           new Passenger(2, web12306, "Jun").start();
           new Passenger(1, web12306, "Harden").start();

      }
    }

    /**
    * 创建乘客资源类
    */
    class Passenger extends Thread{

       /*设置资源*/
       int seats;

       public Passenger(int seats, Runnable target, String name){
           super(target, name);
           this.seats = seats;
      }
    }

    /**
    * 另一个资源类
    */
    class Web12306 implements Runnable{

       /*设置资源*/
       int available;
       String name;

       /*构造器*/
       public Web12306(int available, String name){
           this.available = available;
           this.name = name;
      }

       /**
        * 重写run方法,思考如何获得参数
        */
       public void run(){
           /*通过强制转型的方法拿到seats的值*/
           Passenger p = (Passenger) Thread.currentThread();
           boolean flag = this.bookTickets(p.seats);
           if (flag){
               System.out.println("出票成功!" + Thread.currentThread().getName()
               + "位置为" + p.seats);
          }else {
               System.out.println("出票失败" + Thread.currentThread().getName()
               + "位置不够!!");
          }
      }

       /**
        * 购买方法
        */
       public synchronized boolean bookTickets(int seats){
           System.out.println("可用位置为:" + available);
           if (seats>available){
               return false;
          }

           available -= seats;
           return true;

      }
    }
    梳理
    • 需要使用同步方法保证数据安全

    • 怎么与乘客交互?

      • 乘客继承Thread类

        • 好处:可以在子类当中+线程变量

      • 延续父类的构造器,进行类型强制转型

    • 拿到结果

    It's a lonely road!!!
  • 相关阅读:
    CentOS内核优化提示:cannot stat /proc/sys/net/bridge/bridge-nf-call-ip6tables: 没有那个文件或目录
    CentOS 7使用通过二进制包安装MySQL 5.7.18
    MySQL错误:TIMESTAMP with implicit DEFAULT value is deprecated
    CentOS增加用户到sudo用户组
    Linux下Shell函数返回值实现种类
    Nginx配置直接php
    Nginx报Primary script unknown的错误解决
    CentOS下的apache配置支持php
    CentOS 7解压安装PHP5.6.13
    [ASP.NET MVC] 利用自定义的AuthenticationFilter实现Basic认证
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14900998.html
Copyright © 2011-2022 走看看