第九周课程总结&实验报告(七)

完成火车站售票程序的模拟。
要求:
(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还不够熟悉和了解....还得再接再厉

原文地址:https://www.cnblogs.com/Allen15773771785/p/11722105.html