实验报告(七)
实验任务详情:
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
(1)实验代码:
MyThread类
package 测试;
public class MyThread implements Runnable{
int ticket =1000;
public void run() {
for(int i=0;i<1001;i++){
synchronized(this) {
if(ticket>0) {
try {
Thread.sleep(1000);
}catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"卖出一张:剩余"+ticket--+"张票");
if(ticket==0) {
System.out.println("票已卖完,停止售票");
break;
}
}
}
}
}
}
实验运行
package 测试;
public class 测试0 {
public static void main(String[] args) {
MyThread mt=new MyThread();
System.out.println("票数充足,开始售票");
new Thread(mt,"第一号窗口").start();
new Thread(mt,"第二号窗口").start();
new Thread(mt,"第三号窗口").start();
new Thread(mt,"第四号窗口").start();
new Thread(mt,"第五号窗口").start();
new Thread(mt,"第六号窗口").start();
new Thread(mt,"第七号窗口").start();
new Thread(mt,"第八号窗口").start();
new Thread(mt,"第九号窗口").start();
new Thread(mt,"第十号窗口").start();
}
}
(2)实验运行结果截图:
(3)实验大致思路:
实现Runnable接口,覆写run()方法,设置需要同步的操作,防止出现重复卖票,或者出现负数,.在主类里创建线程对象,并启动线程.
(4)实验中遇到的问题:
这个作业不是很难,基本上就是按照书上的代码进行一定的更改,在调试的时候把加入延迟调低一点,会出现的快一些,但是不知道为什么调成1就开始无限循环,10还有100都没什么问题.然后各个窗口不知道为什么都是一个窗口连续进行售卖票然后才会下一个窗口.
第九周课程总结
本周继续进行了多线程的学习,还学习了Java IO的File类
这周学习的内容:
1.File类
在整个io包中,唯一表示与文件本身有关的类就是File类。使用File类可以进行创建或删除文件等常用操作。要想使用File类,则首先要观察File类的构造方法,此类的常用构造方法如下所示:
public File(String pathname) -> 实例化File类的时候,必须设置好路径。
2.File类中的主要方法和常量
序号 | 方法或常量 | 类型 | 描述 |
---|---|---|---|
1 | public static final String pathSeparator | 常量 | 表示路径的分隔符(windows是:“;”) |
2 | public static final String separator | 常量 | 表示路径的分隔符(windows是:“”) |
3 | public File(String pathname) | 构造 | 创建File类对象,传入完整路径 |
4 | public File(File parent,String child) | 构造 | 根据指定的父路径创建子文件 |
5 | public boolean createNewFile() throws IOException | 普通 | 创建新文件 |
6 | public boolean delete() | 普通 | 删除文件 |
7 | public boolean exists() | 普通 | 判断文件是否存在 |
8 | public boolean isDirectory() | 普通 | 判断给定的路径是否是一个目录 |
9 | public long length() | 普通 | 返回文件的大小 |
10 | public String[] list() | 普通 | 列出指定目录的全部内容,只是列出了名称 |
11 | public File[] listFiles() | 普通 | 列出指定目录的全部内容,会列出路径 |
12 | public boolean mkdir() | 普通 | 创建一个目录 |
13 | public boolean mkdirs() | 普通 | 创建多级目录 |
14 | public boolean renameTo(File dest) | 普通 | 为已有的文件重新命名 |
15 | public long lastModified() | 普通 | 取得文件的最后一次修改日期时间 |
16 | public File getParentFile() | 普通 | 取得当前路径的父路径 |
3.需要注意的地方
在不同的操作系统中,路径的分隔符表示是不一样的,例如:
windows中使用反斜杆表示目录的分隔符:“” ;
linux中使用正斜杆表示目录的分隔符:“/”。
那么,既然Java程序本身具有可移植性的特点,则在编写路径的时候最好可以根据程序所在的操作系统可以进行自动使用符合本地操作系统要求分隔符,这样才能达到可移植性的目的,要想实现这样的功能,则就需要观察File类中提供的两个常量。
package org.lxh.demo12.filedemo;
import java.io.File;
public class FileDemo02 {
public static void main(String args[]) {
System.out.println("pathSeparator:" + File.pathSeparator); // 调用静态常量
System.out.println("separator:" + File.separator); // 调用静态常量
}
}