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


    实验任务详情:

    完成火车站售票程序的模拟。
    要求:
    (1)总票数1000张;
    (2)10个窗口同时开始卖票;
    (3)卖票过程延时1秒钟;
    (4)不能出现一票多卖或卖出负数号票的情况。

    实验代码:

    package 实验七;
    
    public class MyThread implements Runnable {
        public MyThread(String name, int time){
        }
        public MyThread() {
            // TODO Auto-generated constructor stub
        }
        private int ticket=1000;
        private boolean flag=true;
        public void run() {
            while(flag) {
                try {
                    Thread.sleep(1);
                }catch(Exception e) {
                    e.printStackTrace();
                }
                test();
            }
        }
        public synchronized void test() {
            if(ticket<=0){
                flag=false;
                return;
            }
            try{
                Thread.sleep(1);
            }catch(InterruptedException e){
                e.printStackTrace();            
            }
            System.out.println(Thread.currentThread().getName() + "正在卖出第" + (1001-ticket) + "张车票,剩余"+(ticket-1)+"张票");
            --ticket;
        }
    }
            
    package 实验七;
    
    public class Text{
        public static void main(String[] args) {
            MyThread mt=new MyThread();
            Thread t1=new Thread(mt,"卖票窗口1");
            Thread t2=new Thread(mt,"卖票窗口2");
            Thread t3=new Thread(mt,"卖票窗口3");
            Thread t4=new Thread(mt,"卖票窗口4");
            Thread t5=new Thread(mt,"卖票窗口5");
            Thread t6=new Thread(mt,"卖票窗口6");
            Thread t7=new Thread(mt,"卖票窗口7");
            Thread t8=new Thread(mt,"卖票窗口8");
            Thread t9=new Thread(mt,"卖票窗口9");
            Thread t10=new Thread(mt,"卖票窗口10");
            t1.start();
            t2.start();
            t3.start();
            t4.start();
            t5.start();
            t6.start();
            t7.start();
            t8.start();
            t9.start();
            t10.start();
        }
    }

    实验结果:

    错误截图:

     

    正确截图:

     

    实验总结:这次作业老师上课讲过,书上也有例子,所以做起来是比较容易的,但是难免会出现一点问题,像我的就没一次性实现需求,主要部分大致和书上的一样,但是就是没出现随机多窗口售票,顶多就一两个窗口在卖票,和谢思敏遇到的问题差不多吧。问了下他,在run方法里面多加了一个延迟,然后创建了一个新的test方法来控制判断售票情况,得到的结果就满足题目需求了。

    学习总结:

    实现多线程:

     通过继承class Thread或实现Runnable接口,我们可以实现多线程。

    1. 通过继承class Thread实现多线程,class Thread中有两个最重要的函数run()和start()。run()函数必须进行覆写,把要在多个线程中并行处理的代码放到这个函数中。我们不能直接调用run()函数,而是通过调用start()函数来调用run()函数。

    2.如果有一个类,它已继承了某个类,又想实现多线程,那就可以通过实现Runnable接口来实现。

    Runnable接口只有一个run()函数。

    把一个实现了Runnable接口的对象作为参数产生一个Thread对象,再调用Thread对象的start()函数就可执行并行操作。

     2. 通过synchronized实现资源同步

    synchronized 关键字可以在整个class下进行锁定,避免static数据的同时访问。

    JAVA IO

    目前我们学习的是File类,使用File类可以进行创建或删除文件等常用操作。

    注意:在使用该类时,必须向该类的构造方法中传递一个文件路径。

    不同操作系统的路径分隔符也是不同的,windows的是“”,Linux的是“/”。

    所有的操作是由JAVA虚拟机进行的,所以会出现一定的延迟,所以在进行文件操作时要考虑延迟的影响。

     File类中的主要方法和常量

  • 相关阅读:
    springmvc spring mybatis框架整合
    多线程bug修复
    OutOfMemory
    CSS中强悍的相对单位之em(em-and-elastic-layouts)学习小记
    css中line-height行高的深入学习
    HTML5的新语义化的标签
    关于Three.js基本几何形状
    【Google Chrome】 Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource问题解决
    模拟Bootstrap响应式网格系统
    关于我对写博客那些事儿的实用心得
  • 原文地址:https://www.cnblogs.com/Jay-h/p/11728908.html
Copyright © 2020-2023  润新知