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张票的时候调试要花点时间。所以我在实验的时候设置成了比较小的时间延迟,然后再截图的

  • 相关阅读:
    ural(Timus) 1019 Line Painting
    ACMICPC Live Archive 2031 Dance Dance Revolution
    poj 3321 Apple Tree
    其他OJ 树型DP 选课
    poj 3548 Restoring the digits
    ACMICPC Live Archive 3031 Cable TV Network
    递归循环获取指定节点下面的所有子节点
    手动触发asp.net页面验证控件事件
    子级Repeater获取父级Repeater绑定项的值
    没有列名的数据绑定
  • 原文地址:https://www.cnblogs.com/LfanWyuXooo/p/11737566.html
Copyright © 2011-2022 走看看