栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java多线程Svip优先办理服务

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java多线程Svip优先办理服务

文章目录
    • 任务描述
    • 实现

任务描述

在日常工作生活中,无论哪个行业都会设置一些Svip用户,Svip用户具有超级优先权,在办理业务时,Svip用户具有最大的优先级。
本案例要求编写一个模拟Svip优先办理业务的程序,在正常的业务办理中,插入一个Svip用户,优先为Svip用户办理业务。本案例在实现时,可以通过多线程实现。

实现

使用Thread的join方法实现
模拟普通用户正在排队有序办理业务时,SVip突然插队的情况

需要一个Svip的类,里面有一个isContinue的标记,当isContinue为true时表示有Svip插队
然后重写Runnable的run方法,模拟Svip开始办理业务

public class SVip implements Runnable {
    private boolean isContinue;

    public boolean isContinue() {
        return isContinue;
    }

    public void setContinue(boolean aContinue) {
        isContinue = aContinue;
    }

    public SVip() {
    }

    public SVip(boolean isContinue) {
        this.isContinue = isContinue;
    }

    @Override
    public void run() {
        synchronized (this){
            System.out.println("此时来了一位SVip用户");
            System.out.println("SVip用户开始办理业务");
            System.out.println("SVip用户办理倒计时");
            for (int i = 10; i >=0 ; i--) {
                System.out.println(i+"秒");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (i==0){
                    break;
                }
            }
        }
    }
}

然后写一个普通的用户类表示正常情况的排队办理业务
正常排队时,如果传了一个Svip过来,sVip.isContinue()为true执行,并且使用join方法保证不被普通用户抢,Svip办理完业务后又将sVip.isContinue() set为false,继续正常执行。

public class User implements Runnable {
    SVip sVip = new SVip(true);
    Thread thread = new Thread(sVip);
    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println("办理用户窗口在正常排队中");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if (sVip.isContinue()){
                thread.start();
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                sVip.setContinue(false);
            }
        }
    }
}

然后再写一个测试类进行测试

public class SVipTest {
    public static void main(String[] args) {
        User user = new User();
        Thread thread1 = new Thread(user);
        thread1.start();
    }
}

最后可以完美实现需求

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1040360.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号