zoukankan      html  css  js  c++  java
  • 第九周课程总结&实验报告(七)

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

  • 相关阅读:
    JVM heap中各generation的大小(Sizing the Generations)
    MySQL中分组取第一条, 以及删除多余的重复记录
    八芯网线水晶头做法(线序)
    Win7命令行下查看无线网络信息
    OpenWrt的开机启动服务(init scripts)
    犀牛书的实例代码:给对象添加freeze, hide, 查询descriptors
    ES6新特性:Javascript中Generator(生成器)
    ES6新特性:Function函数扩展, 扩展到看不懂
    ES6新特性:Javascript中的Map和WeakMap对象
    ES6新特性:Javascript中Set和WeakSet类型的数据结构
  • 原文地址:https://www.cnblogs.com/Allen15773771785/p/11722105.html
Copyright © 2011-2022 走看看