很简单 我给你个我写的程序,你可以参考一下 不懂的问我。
public class Shoupiao {
public static void main(String[] args) {
chushou c1=new chushou("A地火车站",10);
c1start();//调用Thread中的run方法需要用start();
chushou c2=new chushou("B地火车站",5);
c2start();
chushou c3=new chushou("C地火车站",8);
c3start();
try {
c1join(); //执行完 c1 c2 c3 在继续执行 目的让结束最后输出
c2join();
c3join();
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
Systemoutprintln("结束");
}
}
//新建一个类
class chushou extends Thread{//用继承Thread的方法来实现多线程
String iname;
public void run() {
for(int i=inumber;i>0;i--){
Systemoutprintln(iname+"火车票卖出一张"+"剩余"+(i-1)+"张");
try {
Threadsleep(100);
} catch (Exception e) {
// TODO Auto-generated catch block
eprintStackTrace();
}
}
}
int inumber;
public String getIname() {
return iname;
}
public void setIname(String iname) {
thisiname = iname;
}
public int getInumber() {
return inumber;
}
public void setInumber(int inumber) {
thisinumber = inumber;
}
public chushou(String iname, int inumber) {
thisiname = iname;
thisinumber = inumber;
}
}
public class SaleTicket extends Thread{
static int mark=0;
static int ticket[]=new int [100];
int SaleTicketNo;
SaleTicket(int num){
SaleTicketNo=num;
}
public void run() {
// compute primes larger than minPrime
for(int i=0;i<100;i++)
{
if(ticket[i]==0){
ticket[i]=1;
mark=mark+1;
Systemoutprintln("售票机编号:"+SaleTicketNo+" 票号:"+i+" 张次:"+mark);
}
}
}
}
public class Test {
/
@param args
/
public static void main(String[] args) {
SaleTicket sale1=new SaleTicket(101);
SaleTicket sale2=new SaleTicket(102);
SaleTicket sale3=new SaleTicket(103);
SaleTicket sale4=new SaleTicket(104);
SaleTicket sale5=new SaleTicket(105);
sale1start();
sale2start();
sale3start();
sale4start();
sale5start();
}
}
不考虑死锁问题
public class TicketsSystem {
public static void main(String[] args) {
SellThread st = new SellThread();
Thread th1 = new Thread(st);
th1start();
Thread th2 = new Thread(st);
th2start();
Thread th3 = new Thread(st);
th3start();
}
}
class SellThread implements Runnable {
private int number=10;
String s = new String();
public void run() {
while (number > 0) {
synchronized (s) {
Systemoutprintln("第" + number + "个人在"
+ ThreadcurrentThread()getName() + "买票");
}
number--;
try {
Threadsleep(10);
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
}
synchronized (s)的s是synchronized 的参数,synchronized 的参数可以是任意对象,我定义了一个String类型的对象s,方便看程序而已。
但是要注意,s的定义一定要在run方法之外,不然还会出现负数。因为你启动了3个线程,每个线程都调用了run方法,在每个线程就会在run方法里边产生自己的s对象,一共会产生3个,达不到同步的目的。
如果还有不明白的,可以继续问。
public class ShowDemo{
public static void main(String[] rags)throws Exception{
MyThread mt= new MyThread();
Thread th1 = new Thread(mt,"售票一");
Thread th2 = new Thread(mt,"售票二");
Thread th3 = new Thread(mt,"售票三");
Thread th4 = new Thread(mt,"售票四");
th1start();th2start();th3start();th4start();
}
}
class MyThread implements Runnable{
int ticket=1;
public void run(){
while(ticket<=100){
if("售票一"equals(ThreadcurrentThread()getName()) && ticket%2!=0){
Systemoutprintln("售票一售出:"+ticket++);
}
if("售票二"equals(ThreadcurrentThread()getName()) && ticket%2!=0){
Systemoutprintln("售票二售出:"+ticket++);
}
if("售票三"equals(ThreadcurrentThread()getName()) && ticket%2==0){
Systemoutprintln("售票三售出:"+ticket++);
}
if("售票四"equals(ThreadcurrentThread()getName()) && ticket%4==0){
Systemoutprintln("售票四售出:"+ticket++);
}
}
}
}
能详细说明一下买票按钮的功能是什么吗
程序有几个问题:
第一,maipiao类名要首字母大写,变量的定义尽量不要使用中文
第二,Sell A; 没有初始化,然后你就开始了调用
第三,public void actionPerformed(ActionEvent e),放在Maipiao类里面,什么时候被调用??
第四,多线程的public void run()方法,同样在Maipiao类中,可是它没有被调用
问题有不少,我实在修改不下去了,明天白天如果有空就帮你重写一个
终于给你修改完了,要的话留邮箱
很简单, 出票里加锁就行了完整代码:
public class Test {public static void main(String[] args) {
for(int i=0; i<3; i++){
new Thread("线程 " + i){
public void run() {
while(true){
int p = getNumber();
if(p >0 ){
Systemoutprintln(getName() + " 票号: " + p);
}else{
Systemoutprintln("没票了");
break;
}
}
};
}start();
}
}
public static int num = 100; //总票数
/
synchronized 同步锁
@return
/
public static synchronized int getNumber(){
if(num >0){
return num --; //如果大于0, 则返回当前票并减少一张
}
return 0;
}
}
public class Buy{
Object seller=new Object();
int twantyNumber=0;
int tenNumber=0;
int fiveNumber=1;
int all=5;
public Buy(){
printmony();
buyer zhao=new buyer("赵",2,20);
buyer qian=new buyer("钱",1,20);
buyer sun=new buyer("孙",1,10);
buyer li=new buyer("李",2,10);
buyer zhou=new buyer("周",1,5);
zhaostart();
qianstart();
sunstart();
listart();
zhoustart();
}
class buyer extends Thread{
int number=0;
int mony=0;
String name=null;
boolean hasBuyed=false;
public buyer(String name,int number,int mony) {
thisnumber=number;
thismony=mony;
this name=name;
}
void print(int i){
if(i==0){Systemoutprintln(name+" 正在买 "+number+" 张票 "+ mony+ "元钱");
}
if(i==1){Systemoutprintln(name+" 已经买完 !");
printmony();
}
}
public void run(){
while(!hasBuyed){
synchronized (seller) {
int charge=mony-number5;
if((tenNumber>=charge/10&&fiveNumber>=(charge%10)/5)||charge==0){
print(0);
if(mony==20)twantyNumber++;
if(mony==10)tenNumber++;
if(mony==5)fiveNumber++;
tenNumber-=charge/10;
fiveNumber-=(charge%10)/5;
try {
Threadsleep(1000);
} catch (InterruptedException e) {
eprintStackTrace();
}
print(1);
hasBuyed=true;
sellernotifyAll();
}else{
try {
sellerwait();
} catch (InterruptedException e) {
eprintStackTrace();
}
}
}
}
}
}
void printmony(){
Systemoutprintln("\t 售票员的钱数:");
Systemoutprintln("\t\t\t20元\t10元\t五元");
Systemoutprintln("\t\t\t"+twantyNumber+"张\t"+tenNumber+"张\t"+fiveNumber+"张");
}
public static void main(String[] s){
new Buy();
}
}
结果:
售票员的钱数:
20元 10元 五元
0张 0张 1张
孙 正在买 1 张票 10元钱
孙 已经买完 !
售票员的钱数:
20元 10元 五元
0张 1张 0张
赵 正在买 2 张票 20元钱
赵 已经买完 !
售票员的钱数:
20元 10元 五元
1张 0张 0张
周 正在买 1 张票 5元钱
周 已经买完 !
售票员的钱数:
20元 10元 五元
1张 0张 1张
李 正在买 2 张票 10元钱
李 已经买完 !
售票员的钱数:
20元 10元 五元
1张 1张 1张
钱 正在买 1 张票 20元钱
钱 已经买完 !
售票员的钱数:
20元 10元 五元
2张 0张 0张
以上就是关于java如何写火车站售票系统窗口全部的内容,包括:java如何写火车站售票系统窗口、java中,用static 变量,实现卖火车票,假如有三个窗口,每个窗口都在卖一辆火车的票, 买的票不能重复!、java多线程问题:模拟10个人在3个窗口买票的过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)