我是靠谱客的博主 多情外套,最近开发中收集的这篇文章主要介绍多线程试验。模拟航班售票系统,实现4个售票窗口发售某班次航班的100张机票,一个售票窗口用一个线程表示。要求不能重复发售。,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
五一假期要到了,希望大家都都能开开心心
代码
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Test9_2 extends JFrame implements ActionListener
{
// 多线程试验。模拟航班售票系统,实现4个售票窗口发售某班次航班的100张机票,
//
// 一个售票窗口用一个线程表示。要求不能重复发售。
public Button b_start=new Button("开始售卖");
public s_panel s1=new s_panel(50,100,1,25);
public s_panel s2=new s_panel(50,200,26,50);
public s_panel s3=new s_panel(50,300,51,75);
public s_panel s4=new s_panel(50,400,76,100);
public static int id=1;
public Test9_2()//构造方法
{
super("五一黄金周机票售卖");
setBounds(100,100,700,550);
add(b_start);
b_start.addActionListener( this);
b_start.setBounds(20,50,70,20);
add(s2);
add(s1);
add(s3);
add(s4);
setLayout(null);
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
public static void main(String[] args)
{
new Test9_2();
}
@Override
public void actionPerformed(ActionEvent e) {
b_start.setEnabled(false);
ExecutorService exec= Executors.newCachedThreadPool();
exec.execute(s1);
exec.execute(s2);
exec.execute(s3);
exec.execute(s4);
exec.shutdown();
}
}
class s_panel extends JPanel implements Runnable
{
protected int x,y;
protected int max;
protected int min;
protected JLabel s_Label=new JLabel("售票窗口"+Test9_2.id+++"已售出票号:");
protected JTextField s_TextField=new JTextField(40);
protected int[] nums =new int[100];
//protected int[] nums =new int[25];错误示例
public s_panel(int x,int y,int min,int max)
{
this.x=x;
this.y=y;
this.max=max;
this.min=min;
setBounds(x,y,500,100);
add(s_Label);
add(s_TextField);
s_TextField.setEditable(false);
}
@Override
public void run()
{
try
{
for(int i=min;i<=max;)
{
int flag=1;
int num=(int)(Math.random()*max+1);
//int num=(int)(Math.random()*max+1)-min+1;错误示例
//JOptionPane.showMessageDialog(null,num);
for(int j=min;j<=i;j++)//判断num是否符合条件
{
if (num == nums[j - 1] || num < min || num > max)
{
flag = 0;
break;
}
}
if(flag==1)
{
//JOptionPane.showMessageDialog(null,num);
nums[i-1]=num;
String temp=s_TextField.getText();
s_TextField.setText(temp+" "+num);
TimeUnit.MILLISECONDS.sleep(100);
i++;
}
}
}
catch (Exception e) {
e.printStackTrace();
}
}
}
遇到的问题:
- 困扰我最久的,还是最开始的越界问题,数组越界,刚开始学的时候也是数组越界,现在也是数组越界问题,什么时候才能像wg一样有严谨的数学逻辑思维啊,最开始只有线程1有输出,2,3,4,全都莫得,当时人都鲨了,疯狂debug,死活找不到,结果mm过来指点迷津,令人茅塞顿开,才发现我灯下黑,每次窗口弹出来,都把底下的控制台挡住了,控制台疯狂报错告诉我数组越界,我没看,越界的位置在唯一的一个数组nums那,我最开始设置的大小是25,因为我比较懒就弄了个简单点的,让s1卖1-25,然后依次类推到100,然后为了消除重复元素,就又搞了个数组去做参照,当时想的是数组长度25刚好,但是后来才发现,我的数组指针i和传入的参数max,min有关系,除了s1的max=25,不会越界,其他的三组都会越界,所以莫得显示
- 本来一位数组越界解决完就不会有问题了,但是还是莫得输出,又查了一下,运气好直接找到了int
num=(int)(Math.random()*max+1)-min+1;这个地方呢,是因为-min,所以导致num永远在1-25之间,所以s2,3,4自然不可能有输出,差不多就是这个样子了
谨以此篇博客纪念mm深夜学习给zm带来的鼓励
最后
以上就是多情外套为你收集整理的多线程试验。模拟航班售票系统,实现4个售票窗口发售某班次航班的100张机票,一个售票窗口用一个线程表示。要求不能重复发售。的全部内容,希望文章能够帮你解决多线程试验。模拟航班售票系统,实现4个售票窗口发售某班次航班的100张机票,一个售票窗口用一个线程表示。要求不能重复发售。所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复