//您可以使用重入鎖實現(xiàn)排隊。
創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務(wù),團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為遵義企業(yè)提供專業(yè)的網(wǎng)站制作、做網(wǎng)站,遵義網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。
package?com.lw;
import?java.util.concurrent.locks.Lock;
import?java.util.concurrent.locks.ReentrantLock;
public?class?ReentrantLockDemo?implements?Runnable?{
private?int?number?=?0;//?創(chuàng)建一個變量
private?Lock?lock?=?new?ReentrantLock();//?創(chuàng)建重入鎖對象
@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();
}
//?輸出當(dāng)前線程的名稱和number的值,每次循環(huán)之后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);//?創(chuàng)建線程1
Thread?thread2?=?new?Thread(run);//?創(chuàng)建線程2
thread1.start();//?運行線程1
thread2.start();//?運行線程2
}
}
這個簡單。
先做幾個實體
客戶,售貨員,
客戶包括到達時間,完成目標(biāo)需要的時間,開始操作的時間,結(jié)束的時間。
售貨員包括當(dāng)前正在服務(wù)的客戶,
開2個線程。一個是客戶產(chǎn)生線程。
一個是售貨員消費線程
中間用個公共寄存體queue。
客戶產(chǎn)生線程每次產(chǎn)生一個帶到達時間,完成目標(biāo)時間的客戶。
放倒隊列里,并提醒售貨員線程接收。
售貨員線程空置則從隊列里拿一個客戶,當(dāng)前時間=當(dāng)前時間和客戶到達的時間最大的一個??蛻舻拈_始操作時間=當(dāng)前時間
結(jié)束時間=當(dāng)前時間+需要時間。
處理完以后當(dāng)前時間=結(jié)束時間。
如果隊列空,售貨員線程等待。
不為空就繼續(xù)取。
注意所有處理過的客戶都需要放到一個List里。
然后這一天結(jié)束了,就把整個List里的客戶全部取出來,就算平均等待時間,各種時間。。。。這個會統(tǒng)計的吧。
要求追分
這么經(jīng)典的面向?qū)ο箢}目 ? ?以下代碼僅供參考
import?java.util.Scanner;
public?class?Main?{
public?static?void?main(String[]?args)?{
int?n;
Scanner?scanner?=?new?Scanner(System.in);
System.out.println("請輸入一個正整數(shù):");
n?=?scanner.nextInt();
scanner.close();
PersonQuan?personQuan?=?new?PersonQuan();
Person?person;
for?(int?i?=?1;?i?=?n;?i++)?{
person?=?new?Person(i);
personQuan.addPerson(person);
}
n?=?0;
person?=?personQuan.first;
while?(personQuan.first?!=?personQuan.last)?{
n++;
if?(n?%?3?==?0)?{
//System.out.println("第"?+?n/3?+?"次移除編號:"?+?person.id);
personQuan.removePerson(person);
}
person?=?person.right;
}
System.out.println("最后留下的是第"?+?personQuan.first.id?+?"號");
}
}
class?Person?{
int?id;
Person?left;
Person?right;
public?Person(int?id)?{
this.id?=?id;
}
}
class?PersonQuan?{
Person?first;
Person?last;
public?void?addPerson(Person?person)?{
if?(first?==?null)?{
first?=?person;
last?=?person;
person.left?=?person;
person.right?=?person;
}?else?{
last.right?=?person;
person.left?=?last;
person.right?=?first;
first.left?=?person;
last?=?person;
}
}
public?int?removePerson(Person?person)?{
if?(first?==?last)?{
return?0;
}
if?(person?==?first)?{
last.right?=?person.right;
person.right.left?=?last;
first?=?person.right;
}?else?if?(person?==?last)?{
first.left?=?person.left;
person.left.right?=?first;
last?=?person.left;
}?else?{
person.left.right?=?person.right;
person.right.left?=?person.left;
}
return?1;
}
}
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();
}
}
我覺得挺簡單的因為不需要用到線程 定義一個變量一直++就可以了
package zhidao;
public class TestQueue {
public static void main(String[] args) {
// TODO Auto-generated method stub
for(int i = 100; i 200; i++) {
if(i%3 == 1 i%4 == 2 i%5 == 3) {
System.out.println(i);
}
}
}
118 或者178人
}
新聞名稱:排隊系統(tǒng)java編程代碼 排隊系統(tǒng)java編程代碼大全
鏈接分享:http://aaarwkj.com/article22/docphjc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、定制開發(fā)、網(wǎng)站設(shè)計、、網(wǎng)站導(dǎo)航、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)