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!!!
  • 相关阅读:
    Webstorm 9.0.3 注册码
    css去掉iPhone、iPad的默认按钮样式只需要一行样式就可以搞定
    手机下拉加载
    webpack vuejs项目学习心得
    nodejs常用模块之url
    jquery ajax详解
    iOS 10 (X8)上CoreData的使用(包含创建工程时未添加CoreData)
    使用StoryBoard设置Scrollview的横向滚动不用一行代码
    iOS 创建上线证书
    CoreData多表操作.
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14900998.html
Copyright © 2011-2022 走看看