导航:首页 > 编程语言 > java排队叫号

java排队叫号

发布时间:2022-05-23 17:37:09

java同一个客户端同时多个请求实现排队等候

用队里吧。
建个队列,每次来个请求就向队列里塞。你如果知道生产者和消费者模式的话,就很好解决了。

❷ 如何java实现先接受用户请求然后排队处理

收到请求之后同步处理不就行了,当前的请求没有完成时,其他的请求不处理,等着。

❸ 用java实现银行排队程序,要求模拟银行的业务排队系统,要有界面,实现完成的排队和叫号

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class BankWaiting extends JFrame implements ActionListener {
int total = 0, now = 0;
boolean is1Ready = false, is2Ready = false, is3Ready = false;
int call1, call2, call3;
JFrame jf;
JLabel jr, jl, jl1, j2, jl2, j3, jl3;
JTextField jr4;
JButton jb, jb1, jb2, j1;
JButton workBut1, workBut2, workBut3;
JPanel jp, jp1, jp2;

public BankWaiting() {
setLayout(null);
jf = new JFrame("银行叫号程序");// 窗体
jr = new JLabel("请**号到*号窗口办理业务");
jr.setBounds(300, 10, 800, 50);
jr.setForeground(Color.red);
j1 = new JButton("取号");
j1.addActionListener(this);
jr4 = new JTextField("欢迎");
jr4.setEditable(false);
ButtonGroup bg = new ButtonGroup();
bg.add(j1);
jp = new JPanel();
jl = new JLabel("一号窗口");
jl1 = new JLabel("一号窗口,欢迎你!");
jb = new JButton("下一位");
workBut1 = new JButton("开始办理");
workBut1.addActionListener(this);
jb.addActionListener(this);
jp.setBackground(Color.pink);
jp.setSize(200, 80);// 大小
jp.setLocation(20, 120); // 位置
jf.setLayout(null);
jp1 = new JPanel();
j2 = new JLabel("二号窗口");
jl2 = new JLabel("二号窗口,欢迎你!");
jb1 = new JButton("下一位");
workBut2 = new JButton("开始办理");
jb1.addActionListener(this);
workBut2.addActionListener(this);
jp1.setBackground(Color.pink);
jp1.setSize(200, 80);// 大小
jp1.setLocation(250, 120); // 位置
jf.setLayout(null);
jp2 = new JPanel();
j3 = new JLabel("三号窗口");
jl3 = new JLabel("三号窗口,欢迎你!");
jb2 = new JButton("下一位");
workBut3 = new JButton("开始办理");
workBut3.addActionListener(this);
jb2.addActionListener(this);
jp2.setBackground(Color.pink);
jp2.setSize(200, 80);// 大小
jp2.setLocation(500, 120); // 位置
jf.setLayout(null);
jf.add(jp);
jf.add(jp1);
jf.add(jp2);
jf.add(jr);
jp.add(jl);
jp.add(jl1);
jp.add(jb);
jp.add(workBut1);
jp1.add(j2);
jp1.add(jl2);
jp1.add(jb1);
jp1.add(workBut2);
jp2.add(j3);
jp2.add(jl3);
jp2.add(jb2);
jp2.add(workBut3);

jf.add(j1);
jf.add(jr4);
j1.setBounds(550, 300, 60, 30);
jr4.setBounds(300, 300, 200, 40);
jf.setSize(800, 600);
jf.setVisible(true);
jf.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
}

public void actionPerformed(ActionEvent e) {
String s = "";
if (e.getSource() == j1) {
s = "第" + (++total) + "号,前面还有" + (total - now - 1) + "位顾客!";
jr4.setText(s);
}
if (e.getSource() == jb) {
if (this.hasCustomers()) {
s = "请" + (++now) + "号顾客到一号窗口办理";
call1 = now;
jl1.setText(s);
jr.setText(s);
is1Ready = true;
} else {
s = "当前已经没有顾客了";
jl1.setText(s);
is1Ready = false;
}

} else if (e.getSource() == jb1) {
if (this.hasCustomers()) {
s = "请" + (++now) + "号顾客到二号窗口办理";
call2 = now;
jl2.setText(s);
jr.setText(s);
is2Ready = true;
} else {
s = "当前已经没有顾客了";
jl2.setText(s);
is2Ready = false;
}
} else if (e.getSource() == jb2) {
if (this.hasCustomers()) {
s = "请" + (++now) + "号顾客到三号窗口办理";
call3 = now;
jl3.setText(s);
jr.setText(s);
is3Ready = true;
} else {
s = "当前已经没有顾客了";
jl3.setText(s);
is3Ready = false;
}
}
if (e.getSource() == workBut1) {
if (is1Ready) {
s = call1 + "号顾客正在办理业务。。。";
jl1.setText(s);
is1Ready = false;
}

} else if (e.getSource() == workBut2) {
if (is2Ready) {
s = call2 + "号顾客正在办理业务。。。";
jl2.setText(s);
is2Ready = false;
}

} else if (e.getSource() == workBut3) {
if (is3Ready) {
s = call3 + "号顾客正在办理业务。。。";
jl3.setText(s);
is3Ready = false;
}
}
}

public boolean hasCustomers() {
if (now < total) {
return true;
} else {
return false;
}
}

public static void main(String[] args) {
new BankWaiting();
}
}

❹ java排队

排序就排序呗。
数据量不大,排序花不了多少时间的。
其实既然你要求的“要求服务时间”是固定的,那么优先级就等于1+等待时间/要求服务时间。也就是优先级和等待时间是线性关系。而且,刚服务的那人等待时间被清0了,一定是最小的,所以这样:每处理一个业务,检查他时间到没,到了出队列,没到排队尾,因为他的等待时间是0,必然最小,而刚才没有做业务的,等待时间都同等增加的,所以他们的优先级次序没变,直接把下个拿过来办就行了

❺ java数据结构课程设计病人排队就诊问题!!!

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;
import java.util.Stack;
public class DoctorMain implements Runnable
{
private static Deque<Integer> binRenDeque;
private boolean onWork = false;
private boolean isDoctor = true;
public static Integer binRenNumber = 0;
public DoctorMain()
{
System.out.println("开始上班");
binRenDeque = new ArrayDeque<Integer>();
}
/**
* <br/>
* <方法概述> <br/>
* <方法详细概述> <br/>
* <版本> <br/>
* <作者> *
* @param args
*/
public static void main(String[] args)
{
// TODO Auto-generated method stub
DoctorMain doctor=new DoctorMain();
doctor.setDoctor(true);
//上班了
doctor.setOnWork(true);
Thread th1=new Thread(doctor);

DoctorMain binRen=new DoctorMain();
binRen.setDoctor(false);

binRen.setOnWork(true);

Thread th2=new Thread(binRen);

th1.start();
th2.start();

try
{

Thread.sleep(60000);
doctor.setOnWork(false);
binRen.setOnWork(false);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run()
{
while (onWork)
{

try
{
//是医生还是病人
if (isDoctor)
{
// 医生给病人看病时间
Thread.sleep(2000);
if (!binRenDeque.isEmpty())
{
Integer number = binRenDeque.pollLast();
System.out.println("医生正在给" + number + "号病人看病");
}
}
else
{
//病人来的间隔时间
Thread.sleep((int)(Math.random()*3000));
binRenNumber++;
System.out.println("来了一个病人,号码是:"+binRenNumber);
binRenDeque.push(binRenNumber);
}

//列出所有等待的病人
for(Integer bn:binRenDeque)
{
System.out.println(bn+"号的病人在排队");
}
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}

}
System.out.println("医生下班了");
}
public static Deque<Integer> getBinRenStack()
{
return binRenDeque;
}
public static void setBinRenStack(Deque<Integer> binRenStack)
{
DoctorMain.binRenDeque = binRenStack;
}
public boolean isOnWork()
{
return onWork;
}
public void setOnWork(boolean onWork)
{
this.onWork = onWork;
}
public boolean isDoctor()
{
return isDoctor;
}
public void setDoctor(boolean isDoctor)
{
this.isDoctor = isDoctor;
}
public static Integer getBinRenNumber()
{
return binRenNumber;
}
public static void setBinRenNumber(Integer binRenNumber)
{
DoctorMain.binRenNumber = binRenNumber;
}
}

❻ 数据结构(java编程)的看病排队候诊问题

启动两个线程,A线程-叫号线程,B线程-取号线程
建立一个队列(ArrayQueue ),用来放号
A线程叫号,就从队列拿一个号,该线程可能有多个,对应多个医生,所以叫号时要同步
B线程取号,就一个线程,对应一台取号机

❼ 用多线程实现银行排队功能java

package com.lw;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ReentrantLockDemo implements Runnable {

private int number = 0;// 创建一个变量
private Lock lock = new ReentrantLock();// 创建重入锁对象

@Override
public void run() {

lock.lock();// 打开锁
try {
for (int i = 0; i < 5; i++) {
try {
Thread.sleep(100);// 线程休眠0.1秒
} catch (InterruptedException e) {
e.printStackTrace();
}
// 输出当前线程的名称和number的值,每次循环之后number的值都会加一
System.out.println(Thread.currentThread().getName() + ": "
+ number++);
}
} finally {
lock.unlock();// 释放锁
}
}

public static void main(String[] args) {
ReentrantLockDemo run = new ReentrantLockDemo();// 获得ReentrantLockDemo对象
Thread thread1 = new Thread(run);// 创建线程1
Thread thread2 = new Thread(run);// 创建线程2
thread1.start();// 运行线程1
thread2.start();// 运行线程2
}
}

❽ java 排队执行怎么实现

用队列即可实现先进先出,对应的实现:LinkedList,在分布式环境上,可以用消息队列,如:rocketmq、kafka、activemq

❾ 求助!银行排队叫号程序,java待完善。。。

importjava.awt.Color;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.WindowAdapter;
importjava.awt.event.WindowEvent;

importjavax.swing.ButtonGroup;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JTextField;

{
inttotal=0,now=0;
booleanis1Ready=false,is2Ready=false,is3Ready=false;
intcall1,call2,call3;
JFramejf;
JLabeljr,jl,jl1,j2,jl2,j3,jl3;
JTextFieldjr4;
JButtonjb,jb1,jb2,j1;
JButtonworkBut1,workBut2,workBut3;
JPaneljp,jp1,jp2;

publicBankWaiting(){
setLayout(null);
jf=newJFrame("银行叫号程序");//窗体
jr=newJLabel("请**号到*号窗口办理业务");
jr.setBounds(300,10,800,50);
jr.setForeground(Color.red);
j1=newJButton("取号");
j1.addActionListener(this);
jr4=newJTextField("欢迎");
jr4.setEditable(false);
ButtonGroupbg=newButtonGroup();
bg.add(j1);
jp=newJPanel();
jl=newJLabel("一号窗口");
jl1=newJLabel("一号窗口,欢迎你!");
jb=newJButton("下一位");
workBut1=newJButton("开始办理");
workBut1.addActionListener(this);
jb.addActionListener(this);
jp.setBackground(Color.pink);
jp.setSize(200,80);//大小
jp.setLocation(20,120);//位置
jf.setLayout(null);
jp1=newJPanel();
j2=newJLabel("二号窗口");
jl2=newJLabel("二号窗口,欢迎你!");
jb1=newJButton("下一位");
workBut2=newJButton("开始办理");
jb1.addActionListener(this);
workBut2.addActionListener(this);
jp1.setBackground(Color.pink);
jp1.setSize(200,80);//大小
jp1.setLocation(250,120);//位置
jf.setLayout(null);
jp2=newJPanel();
j3=newJLabel("三号窗口");
jl3=newJLabel("三号窗口,欢迎你!");
jb2=newJButton("下一位");
workBut3=newJButton("开始办理");
workBut3.addActionListener(this);
jb2.addActionListener(this);
jp2.setBackground(Color.pink);
jp2.setSize(200,80);//大小
jp2.setLocation(500,120);//位置
jf.setLayout(null);
jf.add(jp);
jf.add(jp1);
jf.add(jp2);
jf.add(jr);
jp.add(jl);
jp.add(jl1);
jp.add(jb);
jp.add(workBut1);
jp1.add(j2);
jp1.add(jl2);
jp1.add(jb1);
jp1.add(workBut2);
jp2.add(j3);
jp2.add(jl3);
jp2.add(jb2);
jp2.add(workBut3);

jf.add(j1);
jf.add(jr4);
j1.setBounds(550,300,60,30);
jr4.setBounds(300,300,200,40);
jf.setSize(800,600);
jf.setVisible(true);
jf.addWindowListener(newWindowAdapter(){
publicvoidwindowClosing(WindowEvente){
System.exit(0);
}
});
}

publicvoidactionPerformed(ActionEvente){
Strings="";
if(e.getSource()==j1){
s="第"+(++total)+"号,前面还有"+(total-now-1)+"位顾客!";
jr4.setText(s);
}
if(e.getSource()==jb){
if(this.hasCustomers()){
s="请"+(++now)+"号顾客到一号窗口办理";
call1=now;
jl1.setText(s);
jr.setText(s);
is1Ready=true;
}else{
s="当前已经没有顾客了";
jl1.setText(s);
is1Ready=false;
}

}elseif(e.getSource()==jb1){
if(this.hasCustomers()){
s="请"+(++now)+"号顾客到二号窗口办理";
call2=now;
jl2.setText(s);
jr.setText(s);
is2Ready=true;
}else{
s="当前已经没有顾客了";
jl2.setText(s);
is2Ready=false;
}
}elseif(e.getSource()==jb2){
if(this.hasCustomers()){
s="请"+(++now)+"号顾客到三号窗口办理";
call3=now;
jl3.setText(s);
jr.setText(s);
is3Ready=true;
}else{
s="当前已经没有顾客了";
jl3.setText(s);
is3Ready=false;
}
}
if(e.getSource()==workBut1){
if(is1Ready){
s=call1+"号顾客正在办理业务。。。";
jl1.setText(s);
is1Ready=false;
}

}elseif(e.getSource()==workBut2){
if(is2Ready){
s=call2+"号顾客正在办理业务。。。";
jl2.setText(s);
is2Ready=false;
}

}elseif(e.getSource()==workBut3){
if(is3Ready){
s=call3+"号顾客正在办理业务。。。";
jl3.setText(s);
is3Ready=false;
}
}
}

publicbooleanhasCustomers(){
if(now<total){
returntrue;
}else{
returnfalse;
}
}

publicstaticvoidmain(String[]args){
newBankWaiting();
}
}

阅读全文

与java排队叫号相关的资料

热点内容
QQ飞车源码更新 浏览:897
虚拟机中编译器 浏览:474
台达PLC编译按钮在哪里 浏览:137
非编程计算器多少钱 浏览:653
房本还完贷款解压 浏览:816
中国程序员有出名吗 浏览:546
亳州云服务器 浏览:630
程序员最难的面试 浏览:892
配音秀app怎么诵读 浏览:751
sparkcore源码 浏览:100
程序员中年生活 浏览:355
读取加密信息失败怎么回事 浏览:510
编译过程之后是预处理吗 浏览:351
安卓是基于什么做出来 浏览:600
视频字幕提取APP怎么使用 浏览:59
js通过ip地址连接服务器吗 浏览:848
java数字金额大写金额 浏览:858
人人影视路由器固件编译 浏览:967
照片通讯录短信怎么从安卓到苹果 浏览:458
逻辑开发编译环境 浏览:672