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

实验七                                 实验报告(七)

实验任务详情:


一、完成火车站售票程序的模拟。


要求:

(1)总票数1000张;
(2)10个窗口同时开始卖票;
(3)卖票过程延时1秒钟;
(4)不能出现一票多卖或卖出负数号票的情况。

实验代码:

package 第九周;

public class Xiancheng implements Runnable 
{
	private int ticket = 999;                                    // 1000张票

	public void run() 
	{
		for (int i = 0; i < 1000; i++) 
		{
			synchronized (this)                         // 对象同步
			{
				if (ticket >= 0) 
				{
					if (ticket == 0) 
					{
						System.out.println(Thread.currentThread().getName() + "已售罄");
						break;
					} 
					else 
					{
						try 
						{
							Thread.sleep(1000);

						} 
						catch (InterruptedException e) {
							e.printStackTrace();
						}
					System.out.println(Thread.currentThread().getName() + "成功卖出一张票,剩余 : " + ticket--);
					}
				}
			}
		}
	}
}

package 第九周;

public class Train 
{
	public static void main(String args[]) 
	{
		Xiancheng my = new Xiancheng();
		Thread d1 = new Thread(my, "窗口伊");
		Thread d2 = new Thread(my, "窗口饿");
		Thread d3 = new Thread(my, "窗口三");
		Thread d4 = new Thread(my, "窗口寺");
		Thread d5 = new Thread(my, "窗口伍");
		Thread d6 = new Thread(my, "窗口翏");
		Thread d7 = new Thread(my, "窗口漆");
		Thread d8 = new Thread(my, "窗口芭");
		Thread d9 = new Thread(my, "窗口鹫");
		Thread d0 = new Thread(my, "窗口式");
		d4.setPriority(Thread.MIN_PRIORITY);           // 优先级  最低
		d5.setPriority(Thread.MAX_PRIORITY);           // 优先级  最高
		d6.setPriority(Thread.NORM_PRIORITY);          // 优先级  中等
		d1.start();                                    // 同步启动线程
		d2.start(); 
		d3.start();
		d4.start();
		d5.start(); 
		d6.start(); 
		d7.start();
		d8.start();
		d9.start();
		d0.start();
	}

}

实验分析:

错误:根据书本258页仿写,遇到的问题暂无;需要注意之处,使用方法setPriority设置优先级的大小写格式等。
总结:需使用同步的方法解决以上问题,不同步程序不会报错,但没有了实际意义。
正确截图:

                                          课堂学习总结

一、本周复习了两个重要的多线程的类Thread和Runnable;再是学习了Callable接口实现多线程,该接口可实现返回操作数据,最后是线程的状态,了解了5种线程状态以及线程状态的转换过程,还有各种关于线程已有的方法;本周的作业即实验题目可以按照书上的来写,改一些内容,触类旁通,理解了各部分功能即能调节个参数,达到解题的目的。


二、Callable接口中Future Task类的常用方法:


三、线程操作的主要方法:


四、优先级概述:

  • 在 Java 语言中,线程的优先级范围是 1~10,值必须在 1~10,否则会出现异常;优先级的默认值为 5。优先级较高的线程会被优先执行,当执行完毕,才会轮到优先级较低的线程执行。如果优先级相同,那么就采用轮流执行的方式。
  • 主线程有可能比其他线程先执行完。
  • 可以使用 Thread 类中的 setPriority() 方法来设置线程的优先级。
  • 如果要获取当前线程的优先级,可以直接调用 getPriority() 方法。

原文地址:https://www.cnblogs.com/youlanghua/p/11739903.html