zoukankan      html  css  js  c++  java
  • 使用多线程模拟一个银行叫号窗口

    使用继承Thread类的方式创建线程

    银行叫号部分的代码

    package com.dwz.concurrency.chapter2;
    /**
     *    使用static保证号码数据共享
     *    线程的创建方式:继承Thread类
     */
    public class TicketWindow extends Thread{
        private static final int MAX = 100;
        //号码
        private static int index = 1;
        private final String name;
        
        public TicketWindow(String name) {
            this.name = name;
        }
    
        @Override
        public void run() {
            while(index <= MAX) {
                System.out.println(name + "当前的号码是:" + (index++));
            }
        }
    }

    测试代码:

    package com.dwz.concurrency.chapter2;
    
    public class Bank {
        public static void main(String[] args) {
            TicketWindow tw = new TicketWindow("一号柜台");
            tw.start();
            
            TicketWindow tw2 = new TicketWindow("二号柜台");
            tw2.start();
            
            TicketWindow tw3 = new TicketWindow("三号柜台");
            tw3.start();
        }
    }

    使用实现Runnable接口的方式创建线程

    银行叫号部分的代码

    package com.dwz.concurrency.chapter2;
    /**
     * 实现业务逻辑和线程的分离
     */
    public class TicketWindowRunnable implements Runnable {
        private static final int MAX = 100000;
        private int index = 1;
        
        public void run() {
            while(index <= MAX) {
                System.out.println(Thread.currentThread().getName() + " 的号码是:" + (index++));
            }
        }
    }

    测试代码:

    package com.dwz.concurrency.chapter2;
    /**
     * 此方式可以保证TicketWindowRunnable类被实例化一次
     * 三个线程共用一个TicketWindowRunnable对象,达到共享号码的目的
     */
    public class BankVersion2 {
        public static void main(String[] args) {
            TicketWindowRunnable wr = new TicketWindowRunnable();
            Thread thread1 = new Thread(wr, "柜台一");
            Thread thread2 = new Thread(wr, "柜台二");
            Thread thread3 = new Thread(wr, "柜台三");
            
            thread1.start();
            thread2.start();
            thread3.start();
        }
    }
  • 相关阅读:
    router基本使用
    函数声明 和 var声明的优先级
    适用于Windows桌面应用程序的.NET Core 3
    在.Net Core 3.0中尝试新的System.Text.Json API
    在WPF中使用.NET Core 3.0依赖项注入和服务提供程序
    WPF控件获得焦点时去除虚线框
    Call asynchronous method in constructor
    将自定义控件加载到RichTextbox并进行交互
    WPF应用无法使用Snoop分析的解决办法
    关于序列化和反序列化
  • 原文地址:https://www.cnblogs.com/zheaven/p/12028785.html
Copyright © 2011-2022 走看看