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

    实验内容:
    源代码:

    主类:

    
    
    
    package exercise;
    public class TrainStationTicketSales implements Runnable {
    	private int ticket = 1000;
    	public void run() {
    		for(int i = 0 ; i<1000;i++) {
    			this.sale();
    			ticket--;
    		}
    	}
    public synchronized void sale() {
    		if(ticket>=0){
    			try {
    				Thread.sleep(100);
    			
    			}catch(InterruptedException e) {
    				e.printStackTrace();
    			}
    			System.out.println(Thread.currentThread().getName()+"卖出一张票"+" "+"余票:" +ticket);
    		}
    		if(ticket==0) {
    			System.out.println("票已销完");
    			
    		}
    	}
    }
    
    
    

    测试类:

    
    
    
    package exercise;
    
    public class TrainStationTest {
    	public static void main(String args[]) {
    		TrainStationTicketSales ts = new TrainStationTicketSales();
    //		TrainStationTicketSales ts1 = new TrainStationTicketSales();
    		Thread t2 = new Thread(ts,"二号窗口");
    		Thread t1 = new Thread(ts,"一号窗口");
    		Thread t3 = new Thread(ts,"三号窗口");
    		Thread t4 = new Thread(ts,"四号窗口");
    	    Thread t5 = new Thread(ts,"五号窗口");
    	    Thread t6 = new Thread(ts,"六号窗口");
    		Thread t7 = new Thread(ts,"七号窗口");
    		Thread t8 = new Thread(ts,"八号窗口");
    		Thread t9 = new Thread(ts,"九号窗口");
    		Thread t10 = new Thread(ts,"十号窗口");
    		t10.setPriority(Thread.MAX_PRIORITY);
    		t1.setPriority(Thread.MAX_PRIORITY);
    		t9.setPriority(Thread.MAX_PRIORITY);
    		t6.setPriority(Thread.MAX_PRIORITY);
    		t2.setPriority(Thread.MIN_PRIORITY);
    		t4.setPriority(Thread.MIN_PRIORITY);
    		t5.setPriority(Thread.MIN_PRIORITY);
    		t7.setPriority(Thread.MIN_PRIORITY);
    		t3.setPriority(Thread.NORM_PRIORITY);
    		t8.setPriority(Thread.NORM_PRIORITY);
    		t1.start();
    		t2.start();
    		t3.start();
    		t4.start();
    		t5.start();
    		t6.start();
    		t7.start();
    		t8.start();
    		t9.start();
    		t10.start();
    	}
    }
    
    
    

    运行截图:





    思路
    这个题目要求我们用10个窗口售票,我刚开始实例化了10个不同的线程,发现会出现多售票的问题,,而且还有一票多售的问题,然后在一阵思考之后,发现没有设置同步,但是,如果我用同步块的话,就会出现重复调用一个窗口的问题,后来我改成了同步之后,就没有出现了,但是我还是有点疑问,就是我运行之后,就算设置了优先级,也会出现一个窗口卖好多张的问题,刚开始我还以为写的有问题,然后我修改了休眠时间之后,全部运行完之后,拉下来就发现,没有什么问题,就是会出现一个窗口卖好多票,emm,太难了,还是感觉不对,但是还是基本上实现了,然后刚好学了swing组件,一会尝试做成图形的吧。

    学习总结:
    java IO

    在整个Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、InputStream、Writer、Reader;一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了

    Java I/O主要包括如下几个层次,包含三个部分:

    1.流式部分――IO的主体部分;

    2.非流式部分――主要包含一些辅助流式部分的类,如:File类、RandomAccessFile类和FileDescriptor等类;

    3.其他类--文件读取部分的与安全相关的类,如:SerializablePermission类,以及与本地操作系统相关的文件系统的类,如:FileSystem类和Win32FileSystem类和WinNTFileSystem类。

    主要的类如下:

     1. File(文件特征与管理):用于文件或者目录的描述信息,例如生成新目录,修改文件名,删除文件,判断文件所在路径等。
    
     2. InputStream(二进制格式操作):抽象类,基于字节的输入操作,是所有输入流的父类。定义了所有输入流都具有的共同特征。
    
     3. OutputStream(二进制格式操作):抽象类。基于字节的输出操作。是所有输出流的父类。定义了所有输出流都具有的共同特征。
    
     4.Reader(文件格式操作):抽象类,基于字符的输入操作。
    
     5. Writer(文件格式操作):抽象类,基于字符的输出操作。
    
     6. RandomAccessFile(随机文件操作):一个独立的类,直接继承至Object.它的功能丰富,可以从文件的任意位置进行存取(输入输出)操作。
    

    Java中IO流的体系结构如图:

    b、Java流类的类结构图:

  • 相关阅读:
    关于阿里JSON的方法使用
    Xcode自带Git的使用
    IOS学习随笔
    python站点配置相关
    Kingfisher基本入门介绍
    Swift Package Manager使用
    swift中json编码解码
    Weapon项目笔记
    wxj的图片
    类似西瓜视频、抖音的自动播放库
  • 原文地址:https://www.cnblogs.com/xudo/p/11723427.html
Copyright © 2011-2022 走看看