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


    实验七                                 实验报告(七)
    

    实验任务详情:


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


    要求:

    (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() 方法。

  • 相关阅读:
    alpha版、beta版、rc版的意思
    回车符(CR)与换行符(LF), ' '和' '的区别
    html 图像映射(一个图像多个连接)
    前端工程师需要明白的「像素」
    通过设置Ionic-Cli代理解决ionic serve跨域调试问题
    Bootstrap Table使用方法详解
    写给移动开发者的 React Native 指南
    Mac中搭建 iOS 的 React Native 环境
    Windows版本搭建安装React Native环境配置及相关问题
    javascript获取wx.config内部字段解决微信分享
  • 原文地址:https://www.cnblogs.com/youlanghua/p/11739903.html
Copyright © 2020-2023  润新知