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

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

原文地址:https://www.cnblogs.com/ZJ999999/p/11739533.html