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


    完成火车站售票程序的模拟。
    要求:
    (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虚拟机进行的,所以会出现一定的延迟,所以在进行文件操作时要考虑延迟的影响

  • 相关阅读:
    mysql导出某张表的部分数据
    linux命令行实用快捷键
    mysql导出数据库某些表的数据
    二进制日志过期时间设置expire_logs_days
    进程信息
    安装mysql-workbench
    create user
    系统io统计
    mysqldump与mydumper
    系统负载监控
  • 原文地址:https://www.cnblogs.com/ZJ999999/p/11739533.html
Copyright © 2020-2023  润新知