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流类的类结构图:

  • 相关阅读:
    Atitit 华为基本法 attilax读后感
    Atitit 华为管理者内训书系 以奋斗者为本 华为公司人力资源管理纲要 attilax读后感
    Atitit 项目版本管理gitflow 与 Forking的对比与使用
    Atitit 管理的模式扁平化管理 金字塔 直线型管理 垂直管理 水平管理 矩阵式管理 网状式样管理 多头管理 双头管理
    Atitit 乌合之众读后感attilax总结 与读后感结构规范总结
    深入理解 JavaScript 异步系列(4)—— Generator
    深入理解 JavaScript 异步系列(3)—— ES6 中的 Promise
    深入理解 JavaScript 异步系列(2)—— jquery的解决方案
    深入理解 JavaScript 异步系列(1)——基础
    使用 github + jekyll 搭建个人博客
  • 原文地址:https://www.cnblogs.com/xudo/p/11723427.html
Copyright © 2011-2022 走看看