完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
1.代码源
class1.java
package 火车; class Window extends Thread{ static int ticket=100; //公用的 public void run(){ while(true){ if(ticket>0){ System.out.println(Thread.currentThread().getName()+"售票,票号是:"+ticket--); }else{ break; } } } } public class class1 { public static void main(String[] args) { Window w1=new Window(); Window w2=new Window(); Window w3=new Window(); w1.setName("窗口1");//设置线程的名称 w2.setName("窗口2"); w3.setName("窗口3"); //三个子线程,分别执行买票的程序,等待cpu分配资源,一分配就执行 w1.start(); w2.start(); w3.start(); } }
class2.java
package 火车; class Window1 implements Runnable{ int ticket=100; @Override public void run() { // TODO Auto-generated method stub while(true){ if(ticket>0){ try { Thread.currentThread(); Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName()+"售票,票号是:"+ticket--); }else{ break; } } } } public class class2 { public static void main(String[] args) { Window1 w=new Window1(); Thread t1=new Thread(w); Thread t2=new Thread(w); Thread t3=new Thread(w); t1.setName("窗口1"); t1.setName("窗口2"); t1.setName("窗口3"); t1.start(); t2.start(); t3.start(); } }
class3.java
package 火车; class Window2 implements Runnable{ int ticket=100; @Override public void run() { // TODO Auto-generated method stub while(true){ synchronized (this) { if (ticket > 0) { try { Thread.currentThread(); Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } System.out.println(Thread.currentThread().getName() + "售票,票号是:" + ticket--); } } } } } public class class3 { public static void main(String[] args) { Window2 w=new Window2(); Thread t1=new Thread(w); Thread t2=new Thread(w); Thread t3=new Thread(w); t1.setName("窗口1"); t1.setName("窗口2"); t1.setName("窗口3");
t1.setName("窗口4");
t1.setName("窗口5");
t1.setName("窗口6");
t1.setName("窗口7");
t1.setName("窗口8");
t1.setName("窗口9");
t1.setName("窗口10");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
t8.start();
t9.start();
t10.start();
}
}
2.运行结果图
表示太多了,所以没有截图很多。。
3.实验报
(1)让我知道了实现接口Rannable具备多线程操作的能力
(2)使用同步代码块或者同步方法提高程序的安全性
(3)同步代码块和方法,被修饰的代码块和方法一旦被某个线程访问,则直接锁住,其他的线程无法访问
(4)锁对象需要被所有的线程共享
(5)感觉自己对java还不够熟悉和了解....还得再接再厉