「java售票」java售票系统代码
今天给各位分享java售票的知识,其中也会对java售票系统代码进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、模拟售票 java 售票窗接口Wicket方法:sellTicket()
- 2、java多线程的卖票问题
- 3、java编程实现景区售票规则:成人票每人10元,儿童票折半(如果儿童身高不超过1.2
- 4、java编程:简单的售票系统问题
模拟售票 java 售票窗接口Wicket方法:sellTicket()
interface Wicket {
Object obj = new Object();
public void sellTicket();
public void wicketName();
}
class MovieWicket implements Wicket, Runnable {
int MovieTicket = 30;
int Eachticket = 10;
public void run() {
for (; Eachticket 0; Eachticket--)
sellTicket();
}
public synchronized void sellTicket() {
if (MovieTicket 0 Eachticket 0)
System.out.println("MovieTicket剩余" + --MovieTicket + " "
+ Thread.currentThread().getName());
}
public void wicketName() {
}
}
class BusWicket implements Wicket, Runnable {
int BusTicket = 30;
int Eachticket = 10;
public void run() {
for (; Eachticket 0; Eachticket--)
sellTicket();
}
public synchronized void sellTicket() {
if (BusTicket 0 Eachticket 0)
System.out.println("BusWicket剩余" + --BusTicket + " "
+ Thread.currentThread().getName());
}
public void wicketName() {
}
}
class TrainWicket implements Wicket, Runnable {
int TrainTicket = 30;
int Eachticket = 10;
public void run() {
for (; Eachticket 0; Eachticket--)
sellTicket();
}
public synchronized void sellTicket() {
if (TrainTicket 0 Eachticket 0)
System.out.println("TrainTicket剩余" + --TrainTicket + " "
+ Thread.currentThread().getName());
}
public void wicketName() {
}
}
public class WicketDemo {
static void DoubleThread(Runnable oj) {
Thread t1 = new Thread(oj);
Thread t2 = new Thread(oj);
t1.setName("线程1");
t2.setName("线程2");
t1.start();
t2.start();
}
public static void main(String[] args) {
MovieWicket mw = new MovieWicket();
BusWicket bw = new BusWicket();
TrainWicket tw = new TrainWicket();
while (mw.MovieTicket != 0 || bw.BusTicket != 0 || tw.TrainTicket != 0) {
long t1 = System.currentTimeMillis();
int rand = (int) (Math.random() * 3);
if (rand == 0 mw.MovieTicket0) {
System.out.println("正在卖10张电影票!");
WicketDemo.DoubleThread(mw);
mw.Eachticket = 10;
} else if (rand == 1 bw.BusTicket 0) {
System.out.println("正在卖10张汽车票!");
WicketDemo.DoubleThread(bw);
bw.Eachticket = 10;
} else if(rand == 2 tw.TrainTicket 0) {
System.out.println("正在卖10张火车票!");
WicketDemo.DoubleThread(tw);
tw.Eachticket = 10;
}
long t2 = System.currentTimeMillis();
if (t2 - t1 3000) {
try {
Thread.sleep(3000 - t2 + t1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
刚好我也在学多线程,就拿你的问题练习一下,写出来一坨翔给你参考一下。你的要求应该是已经完全满足了,期待高手优化。
java多线程的卖票问题
首先,定义的锁(lock)不对,必须是同一个锁,像你这样用this,new多少个MyThread就有多少个锁,违反了线程的同步机制;
其次,你如果想要呈现多线程的竞争,不可以在run方法里让一个线程一直运行而不释放锁,应该使用wait()/notify();
以下我稍微修改下,会形成两个线程交替执行的情形:
public class ThreadTest {
public static Object obj = new Object();
public static int number = 10;// 用static共享票源,不知道可以不,按理说是可以的
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
MyThread my = new MyThread();
MyThread my2 = new MyThread();
Thread t1 = new Thread(my2, "2号窗口");
Thread t2 = new Thread(my, "1号窗口");
t1.start();
t2.start();
}
static class MyThread implements Runnable {
public void run() {
while (true)
synchronized (obj) {
if (number 0) {
System.out.println(Thread.currentThread().getName()
+ "正在卖票," + "还剩" + number + "张票");
number--;
obj.notifyAll();
try {
obj.wait();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else
break;
}
}
}
}
java编程实现景区售票规则:成人票每人10元,儿童票折半(如果儿童身高不超过1.2
这个规则就是设计一个方法,该方法最后值为一个票价,参数应该是身高,所以有如下代码
public class PriceTest {
public static void main(String[] args) {
int childPrice = getPrice(1.2);
int adultPrice = getPrice(1.5);
System.out.println("1.2米身高的票价为:"+childPrice);
System.out.println("1.5米身高的成人票价为:"+adultPrice);
}
private static int getPrice(double height) {
return height 1.2?10:5;
}
}
最后结果如下:
java编程:简单的售票系统问题
你的不是调试的问题 是错 通过编译了 但是你想实现的没有 很多错误抛出了 。。。
java售票的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java售票系统代码、java售票的信息别忘了在本站进行查找喔。
发布于:2022-12-20,除非注明,否则均为
原创文章,转载请注明出处。