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

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

    课程总结:

    本周课程学习到了多线程和使用File类进行文件的操作
    Java中多线程的实现主要是通过继承Thread类或实现Runnable接口。其中Runnable接口可以资源共享。两种方法都要通过覆写run();
    通过Runnable接口创建线程的步骤如下:
    1、定义实现Runnable接口的类,并实现该类中的run()方法。
    2、建立一个Thread对象,并将实现的Runnable接口的类的对象作为参数传入Thread类的构造方法。
    3、通过Thread类中的start()方法启动线程,并运行。
    注:直接调用Thread类或Runnable类对象的run()方法是无法启动线程的,这只是一个简单的方法调用必须通过Thread方法中的start()才行。
    实现Runnable接口相对于继承Thread类来说,有如下优势:
    (1)适合相同程序的多个线程去处理同一资源的情况。
    (2)可以避免由于Java的单继承特性带来的局限。
    (3)增强了程序的健壮性,代码能够被多个线程共享,代码与数据是独立的。
    Runnable接口格式

    class 类名称 implements Runnable{
         属性;
         方法;
         public viod run(){
                线程主体;
       }
    }
    

    取得设置线程名称
    在Thread类中,可以通过 getName() 方法取得线程的名称,通过 setName()方法设置线程的名称
    同步代码块

    synchronized(同步对象){        ///synchronized(this)this表示当前对象
            需要同步的代码块;
    }
    

    同步方法

    synchronized  方法返回值  方法名称(参数列表){
            方法体
    }
    

    File类的构造方法
    public File(String pathname):根据指定的路径(可以是绝对路径或相对路径)创建File对象。
    public File(String parent, String child):根据指定的父文件夹和子文件或者子文件夹创建File对象
    public File(File parent, Sting child):根据指定的父文件夹对象和子文件或者子文件夹创建File对象
    使用RandonAcccessFile类写入数据
    createNewFile(); 创建新文件
    delete(); 删除一个指定文件
    mkdir(); 创建一个文件夹
    public String[]list(); 列出全部名称,返回一个字符串数组
    public File[]listFiles(); 列完整的路径,返回一个File对象数组
    isDirectory(); 判断一个给定的路径是否是目录
    public String[] list():

    若此File对象表示已存在的目录,则返回此目录下的所有文件名(不包括子目录中的文件)和一级子目录名的字符串数组;若此目录为空,则返回一个空数组;
    若此File对象表示已存在的文件,则返回null;
    若此File对象表示的目录或文件不存在,则返回null。

    public File[] listFiles():作用同list()方法类似,只不过返回的数组元素是表示文件或目录的File对象。
    public static File[] listRoots():返回系统所有的根路径的File对象。Windows中返回的就是盘符。

    实验总结:

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

    package test;
    
    class Ticket implements Runnable{
    
        private int tickets=1000;
        
        public int getTickets() {
            return tickets;
        }
    
        public void setTickets(int tickets) {
            this.tickets = tickets;
        }
    
        public void run() {
            while(true) {
                synchronized(this){
                    try {
                        if(tickets>0) {
                            System.out.println(Thread.currentThread().getName()+":第 "+tickets+" 张票 ");
                            tickets--;
                        }
                        Thread.sleep(1000);
                    }catch(Exception e) {
                    	e.printStackTrace();
                        System.out.println(e.getMessage());
                    }
                }
                if(tickets<=0){
                    break;
                }
            }
        }
    }
    
    public class Maechine {
    
        public static void main(String[] args) {
            Ticket mt=new Ticket();
            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();
    
        }
    }
    

    实验截图:

    本次作业由于上课的时候老师讲过,在加上书上也有类似的例子理解了实际上做起来不是特别难,只是延迟时间设置成1秒钟,卖1000张票的时候调试要花点时间。所以我在实验的时候设置成了比较小的时间延迟,然后再截图的

  • 相关阅读:
    Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)
    Liferay7 BPM门户开发之33: Portlet之间通信的3种方式(session、IPC Render Parameter、IPC Event、Cookies)
    Liferay7 BPM门户开发之32: 实现自定义认证登陆(定制Authentication Hook)
    Liferay7 BPM门户开发之30: 通用帮助类Validator、ArrayUtil、StringUtil等使用
    Liferay7 BPM门户开发之29: 核心kernel.util包下面的通用帮助类ParamUtil、GetterUtil使用
    Liferay7 BPM门户开发之28: Portlet文件上传,及实体类同步更新上传
    Liferay7 BPM门户开发之26: 集成Activiti到Liferay7
    Liferay7 BPM门户开发之27: MVC Portlet插件工程开发
    Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)
    Liferay7 BPM门户开发之24: Liferay7应用程序安全
  • 原文地址:https://www.cnblogs.com/LfanWyuXooo/p/11737566.html
Copyright © 2011-2022 走看看