排序就排序唄。
在湯原等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都做網(wǎng)站、網(wǎng)站設(shè)計 網(wǎng)站設(shè)計制作按需設(shè)計網(wǎng)站,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),高端網(wǎng)站設(shè)計,營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站制作,湯原網(wǎng)站建設(shè)費(fèi)用合理。
數(shù)據(jù)量不大,排序花不了多少時間的。
其實既然你要求的“要求服務(wù)時間”是固定的,那么優(yōu)先級就等于1+等待時間/要求服務(wù)時間。也就是優(yōu)先級和等待時間是線性關(guān)系。而且,剛服務(wù)的那人等待時間被清0了,一定是最小的,所以這樣:每處理一個業(yè)務(wù),檢查他時間到?jīng)],到了出隊列,沒到排隊尾,因為他的等待時間是0,必然最小,而剛才沒有做業(yè)務(wù)的,等待時間都同等增加的,所以他們的優(yōu)先級次序沒變,直接把下個拿過來辦就行了
這個簡單。
先做幾個實體
客戶,售貨員,
客戶包括到達(dá)時間,完成目標(biāo)需要的時間,開始操作的時間,結(jié)束的時間。
售貨員包括當(dāng)前正在服務(wù)的客戶,
開2個線程。一個是客戶產(chǎn)生線程。
一個是售貨員消費(fèi)線程
中間用個公共寄存體queue。
客戶產(chǎn)生線程每次產(chǎn)生一個帶到達(dá)時間,完成目標(biāo)時間的客戶。
放倒隊列里,并提醒售貨員線程接收。
售貨員線程空置則從隊列里拿一個客戶,當(dāng)前時間=當(dāng)前時間和客戶到達(dá)的時間最大的一個??蛻舻拈_始操作時間=當(dāng)前時間
結(jié)束時間=當(dāng)前時間+需要時間。
處理完以后當(dāng)前時間=結(jié)束時間。
如果隊列空,售貨員線程等待。
不為空就繼續(xù)取。
注意所有處理過的客戶都需要放到一個List里。
然后這一天結(jié)束了,就把整個List里的客戶全部取出來,就算平均等待時間,各種時間。。。。這個會統(tǒng)計的吧。
要求追分
用隊列即可實現(xiàn)先進(jìn)先出,對應(yīng)的實現(xiàn):LinkedList,在分布式環(huán)境上,可以用消息隊列,如:rocketmq、kafka、activemq
用隊里吧。
建個隊列,每次來個請求就向隊列里塞。你如果知道生產(chǎn)者和消費(fèi)者模式的話,就很好解決了。
1 sleep(sleepTime);
2 stop();
3 sleep(sleepTime);
4 stop();
5 new Rabbit(1000,"Rabbit",9);
6 new Tortoise(1500,"Tortoise",10);
7 tortoise.start();
8 rabit.start();
很基礎(chǔ)的題目
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("請**號到*號窗口辦理業(yè)務(wù)");
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 = "當(dāng)前已經(jīng)沒有顧客了";
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 = "當(dāng)前已經(jīng)沒有顧客了";
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 = "當(dāng)前已經(jīng)沒有顧客了";
jl3.setText(s);
is3Ready = false;
}
}
if (e.getSource() == workBut1) {
if (is1Ready) {
s = call1 + "號顧客正在辦理業(yè)務(wù)。。。";
jl1.setText(s);
is1Ready = false;
}
} else if (e.getSource() == workBut2) {
if (is2Ready) {
s = call2 + "號顧客正在辦理業(yè)務(wù)。。。";
jl2.setText(s);
is2Ready = false;
}
} else if (e.getSource() == workBut3) {
if (is3Ready) {
s = call3 + "號顧客正在辦理業(yè)務(wù)。。。";
jl3.setText(s);
is3Ready = false;
}
}
}
public boolean hasCustomers() {
if (now total) {
return true;
} else {
return false;
}
}
public static void main(String[] args) {
new BankWaiting();
}
}