zoukankan      html  css  js  c++  java
  • 笔记20200515:多线程【静态代理模式】

    ①设计模式:
    • 真实角色
    • 代理角色:持有真实角色的引用
    • 二者实现相同的接口
    • package com.chengguo.线程;
      
      /**
       * 静态代理设计模式:
       * ①真实角色
       * ②代理角色:持有真实角色的引用
       * ③二者实现相同接口
       */
      public class Demo_20200509005_StaticProxy {
          public static void main(String[] args) {
      //        WeddingCompany wc = new WeddingCompany(new You());
      //        wc.HappyMarry();
              //创建真实角色(可以使用接口)
              Marry you = new You();
              //创建代理角色(可以使用接口),加入真实角色的引用
              Marry weddingCompany = new WeddingCompany(you);
              //执行
              weddingCompany.HappyMarry();
          }
      }
      
      //③二者实现相同接口
      interface Marry {
          //久旱逢甘露
          //他乡遇故知
          //洞房花烛夜
          //金榜题名时
          void HappyMarry();
      }
      
      //①真实角色
      class You implements Marry {
          //重写接口方法
          @Override
          public void HappyMarry() {
      
              System.out.println("新郎官结婚咯");
          }
      }
      
      //②代理角色
      class WeddingCompany implements Marry {
          private Marry you;
      
          //无参构造
          public WeddingCompany() {
          }
      
          //带参构造
          public WeddingCompany(Marry you) {
      
              this.you = you;
          }
      
          //重写接口方法
          @Override
          public void HappyMarry() {
              before();
              this.you.HappyMarry();
              after();
      
          }
      
          //结婚之后
          private void after() {
              System.out.println("结婚之后--->收尾款");
          }
      
          //结婚之前
          private void before() {
              System.out.println("结婚之前--->布置现场");
          }
      }

      静态代理+线程模拟12306抢票实现

    • package com.chengguo.线程;
      
      /**
       * 多个线程同时操作同一个对象:买火车票的例子
       */
      public class Demo_20200509002_Thread implements Runnable {
          //定义火车票默认张数
          private int ticketNums = 10;
      
          @Override
          public void run() {
              while (true) {
                  if (ticketNums <= 0) {
                      break;
                  } else {
      
                      try {
                          //模拟延时
                          Thread.sleep(4000);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
      
                      //获取当前票的名字:Thread.currentThread().getName();每抢一张票就--
                      System.out.println(Thread.currentThread().getName() + "抢到了第" + ticketNums-- + "张票");
                  }
      
              }
      
          }
      
          public static void main(String[] args) {
              //创建runnable接口的实现类对象(真实角色)
              Demo_20200509002_Thread dt1 = new Demo_20200509002_Thread();
              //创建一个线程对象,通过线程对象来开启线程(代理角色:持有真实角色的引用)
      //        Thread thread1 = new Thread(dt1, "路人甲");
      //        thread1.start();
      //        Thread thread2 = new Thread(dt1, "路人乙");
      //        thread2.start();
      //        Thread thread3 = new Thread(dt1, "路人丙");
      //        thread3.start();
      
      //        优化代码
              new Thread(dt1, "路人甲").start();
              new Thread(dt1, "路人乙").start();
              new Thread(dt1, "路人丙").start();
          }
      }

      总结

  • 相关阅读:
    将帅问题
    堆栈(链栈)
    堆栈(基础实现原理 顺序栈)
    双向链表
    冒泡排序 (泛型版)
    maven
    jboss数据源配置
    仓库介绍,nexus的安装
    mave聚合继承
    mac mysql 安装
  • 原文地址:https://www.cnblogs.com/sadfoo/p/12993550.html
Copyright © 2011-2022 走看看