�
实验任务详情:
完成火车站售票程序的模拟。
要求:
(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。
package Zuoye7;
class MyThread implements Runnable{
private int ticket=1000;
public void run() {
for(int i=0;i<1001;i++) {
this.sales();
}
}
public synchronized void sales() {
if(ticket>0) {
try {
Thread.sleep(1000);
}
catch(InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"售票:"+ticket--);
}
}
};
public class Ticket {
public static void main(String[] args) {
MyThread mt1=new MyThread();
new Thread(mt1,"窗口1").start();
new Thread(mt1,"窗口2").start();
new Thread(mt1,"窗口3").start();
new Thread(mt1,"窗口4").start();
new Thread(mt1,"窗口5").start();
new Thread(mt1,"窗口6").start();
new Thread(mt1,"窗口7").start();
new Thread(mt1,"窗口8").start();
new Thread(mt1,"窗口9").start();
new Thread(mt1,"窗口10").start();
}
}
学习总结
线程的状态
(1)取得和设置线程名称
通过getName和setName;
如果没有设置名字,系统会为其自动分配名称,格式Thread-Xx。
名称可能相同,id不可能相同。
Java中所有线程都是同时启动的,所有main线程结束不会对其他线程有影响。
(2)判断线程是否自动启动
使用isAlive()来测试线程是否启动且仍在运行。
是,返回true;否,返回false;
(3)线程的强制运行
采用join()方法,在线程强制运行期间,其他线程无法运行,必须等待此线程完成后才可以继续执行。
(4)线程的休眠、中断
使用Thread.sleep()方法,时间单位ms.
(5)线程的优先级
用setPriority设置。
MAX_PRIORITY 最高优先级
NORM_PRIORITY 中等优先级 (主方法的优先级)
MIN_PRIORITY 最低优先级
(6)线程的礼让
运用yield方法将一个线程的操作暂时让给其他线程执行。
(7)同步代码块
synchronized(同步对象){
需要同步的代码;
}
(8)操作文件的类File
Windows目录的分隔符""
Linux目录的分割符“/"
输入要“";
(9)列出指定目录的全部文件
public String[] list(): 列出全部名称,返回一个字符串数组。
public File[] listFiles():列出完整路径,返回一个File对象数组。
判断一个给定路径是否为目录
运用isDirectory()方法判断。