zoukankan      html  css  js  c++  java
  • 第九周课程总结&实验报告(七)

    实验七                                 实验报告(七)
    

    实验任务详情:


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


    要求:

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

  • 相关阅读:
    C#开发: 通信篇-串口调试助手
    C#开发: 准备工作-C# 新建工程
    C#开发: 准备工作-Visual Studio 安装
    ESP8266 SDK开发: 外设篇-串口
    ESP8266 SDK开发: 外设篇-定时器,延时
    ESP8266 SDK开发: 外设篇-GPIO中断检测
    【java编程】加载Resources配置文件的方法
    【java高级编程】jdk自带事件模型编程接口
    【mybatis源码学习】mybtias知识点
    【java编程-Javassist】秒懂Java动态编程(Javassist研究)
  • 原文地址:https://www.cnblogs.com/youlanghua/p/11739903.html
Copyright © 2011-2022 走看看