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

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

    package 实验七;
    class MyThread implements Runnable {
        private static int ticket=1000;
        
        public void run() {
            for(int i=0;i<100;i++) {
                this.sale();
            }
        }
      
      public synchronized void sale() {
          if(ticket>0) {
        	  System.out.println(Thread.currentThread().getName() + "成功售出一张票,剩余"+(ticket-1)+"张票");
              --ticket;
          }
              try {
                  Thread.sleep(1);
              }catch(InterruptedException e) {
                  e.printStackTrace();
              }
              
          }
      }
    
    public class maipiao {
    
      public static void main(String[] args) {
         MyThread my=new MyThread();
         new Thread(my,"第一个窗口").start();
         new Thread(my,"第二个窗口").start();
         new Thread(my,"第三个窗口").start();
         new Thread(my,"第四个窗口").start();
         new Thread(my,"第五个窗口").start();
         new Thread(my,"第六个窗口").start();
         new Thread(my,"第七个窗口").start();
         new Thread(my,"第八个窗口").start();
         new Thread(my,"第九个窗口").start();
         new Thread(my,"第十个窗口").start();
      }
    
    }
    

    实验结果

    学习总结
    1,继承Thread类创建线程:
    Thread类本质上是实现了Runnable接口的一个实例,代表一个线程的实例。启动线程的唯一方法就是通过Thread类的start()实例方法。start()方法是一个native方法,它将启动一个新线程,并执行run()方法。这种方式实现多线程很简单,通过自己的类直接extend Thread,并复写run()方法,就可以启动新线程并执行自己定义的run()方法。

    2,实现Runnable接口创建线程:
    如果自己的类已经extends另一个类,就无法直接extends Thread,此时,可以实现一个Runnable接口

    3,Thread类和Runnable接口的区别
    实际上Thread类和Runnable接口之间在使用上也是有所区别的,如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,则可以方便的实现资源的共享。

    4,通过synchronized实现资源同步

    synchronized 关键字可以在整个class下进行锁定,避免static数据的同时访问。
    当编写synchronized块时,有几个简单的准则可以遵循,这些准则在避免死锁和性能危险的风险大有帮助:
    (1) 使代码块保持简短,把不随线程变化的预处理和后处理移出synchronized块 
    (2) 不要阻塞。如 InputStream.read() 
    (3) 在持有锁的时候,不要对其他对象调用方法
    

    Java IO

    使用File类进行文件的操作
    以下是针对文件本身操作的
    createNewFile(); 创建新文件
    delete(); 删除一个指定文件
    mkdir(); 创建一个文件夹
    public String[]list(); 列出全部名称,返回一个字符串数组
    public File[]listFiles(); 列完整的路径,返回一个File对象数组
    isDirectory(); 判断一个给定的路径是否是目录
    

    RandomAccessFile类可以对文件内容进行操作
    不同操作系统的路径分隔符也是不同的,windows的是“”,Linux的是“/”。

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

  • 相关阅读:
    【Android N 7.1.1】 屏幕亮和灭的处理地方
    Android 测量调用方法耗时的方法
    【Android M】获取屏幕锁定的相关信息:“无”,“滑动”,“PIN码”,"图案","密码"
    【Android N 7.1.1】 ActivityManagerService 获取cpu状态
    Android 判断当前是否在跑monkey测试
    【Android N 7.1.1】 锁屏之上显示Toast
    【Android N 7.1.1】 处于锁屏界面时可以转屏
    【Android N 7】使用量统计usagestats
    #### 批处理命令 获取当前目录下所有文件的路径
    Linux命令 swap:内存交换空间
  • 原文地址:https://www.cnblogs.com/ZJ999999/p/11739533.html
Copyright © 2011-2022 走看看