導航:首頁 > 編程語言 > 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排隊叫號相關的資料

熱點內容
非編程計算器多少錢 瀏覽:653
房本還完貸款解壓 瀏覽:816
中國程序員有出名嗎 瀏覽:546
亳州雲伺服器 瀏覽:630
程序員最難的面試 瀏覽:892
配音秀app怎麼誦讀 瀏覽:750
sparkcore源碼 瀏覽:100
程序員中年生活 瀏覽:355
讀取加密信息失敗怎麼回事 瀏覽:510
編譯過程之後是預處理嗎 瀏覽:351
安卓是基於什麼做出來 瀏覽:600
視頻字幕提取APP怎麼使用 瀏覽:59
js通過ip地址連接伺服器嗎 瀏覽:848
java數字金額大寫金額 瀏覽:858
人人影視路由器固件編譯 瀏覽:967
照片通訊錄簡訊怎麼從安卓到蘋果 瀏覽:458
邏輯開發編譯環境 瀏覽:672
ce自己編譯 瀏覽:898
javaexe進程 瀏覽:478
電腦wechat是什麼文件夾 瀏覽:958