Java多线程Svip优先办理服务

本文通过Java编程,展示了如何使用Thread和Runnable实现Svip用户在普通业务办理中的优先级。通过创建SVip类和User类,模拟了SVip用户插队并优先办理业务的过程,以及普通用户按序等待的情况。
摘要由CSDN通过智能技术生成

文章目录

任务描述

在日常工作生活中,无论哪个行业都会设置一些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();
    }
}

最后可以完美实现需求
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值