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


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

  • 相关阅读:
    内存分配略谈
    变量声明顺序和指针偏移问题示例
    解决You have to be inside an Angular CLI project in order to use the serve command
    Linux中将命令放到全局
    Linux设置vim显示行号
    根据指定的excel模板导出数据
    解决 Maven工程运行报错Failed to clean project: Failed to delete
    springcloud工作用常用到的一些注解
    cmd窗口备份mysql数据库
    调用存储过程msql
  • 原文地址:https://www.cnblogs.com/Allen15773771785/p/11722105.html
Copyright © 2020-2023  润新知