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!!!
  • 相关阅读:
    powerDesigner生成Html及Word
    MySQL中information_schema是什么
    使用Navicat快速生成数据库字典
    SpringBoot学习:使用spring-boot-devtools进行热部署
    ajax 把返回结果作为参数传递
    application.properties详解 --springBoot配置文件
    intellij idea 无法启动或调试 spring-boot
    mybatis添加记录时返回主键id
    springboot form 提交集合 list
    表单提交之List集合
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14900998.html
Copyright © 2011-2022 走看看