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


    **实验任务详情:**
    
    完成火车站售票程序的模拟。
    **要求:**
    (1)总票数1000张;
    (2)10个窗口同时开始卖票;
    (3)卖票过程延时1秒钟;
    (4)不能出现一票多卖或卖出负数号票的情况。
    

    一:实验代码

    class MyThread implements Runnable{                  //实现Runnable接口
    	private int ticket=1000;
    	public void run() {                                           //覆写run方法
    		for(int i=0;i<100;i++) {
    			synchronized(this) {                            //设置需要同步的操作
    				if(ticket>0) {                                   //判断是否有票
    					try {
    						Thread.sleep(1000);
    					}
    					catch(InterruptedException e) {
    						e.printStackTrace();
    					}
    					System.out.println(Thread.currentThread().getName()+"售票,余票:"+ticket--);    
    				}
    			}
    		}
    	}
    };
    public class Chake{
    	public static void main(String[] args) {
    		MyThread mt=new MyThread();              //定义MyThread线程对象
    		new Thread(mt,"窗口1").start();                //启动窗口
    		new Thread(mt,"窗口2").start();
    		new Thread(mt,"窗口3").start();
    		new Thread(mt,"窗口4").start();
    		new Thread(mt,"窗口5").start();
    		new Thread(mt,"窗口6").start();
    		new Thread(mt,"窗口7").start();
    		new Thread(mt,"窗口8").start();
    		new Thread(mt,"窗口9").start();
    		new Thread(mt,"窗口10").start();
    	}
    }
    

    二:运行截图

    总结:
    这周主要就是学会Runnable接口与Thread类以及synchronized同步的用法,这道题如果不用同步的话会出现售卖负数票以及一票多买的情况。我觉得Thread线程我还是没理解清楚,不过这道题可以用两种方法来写,同步代码块和同步方法,而我用的就是书上的同步代码块方法,如果用继承Thread而不是Runnable来写的话,synchronized同步就要考虑一下能不能用this了,而且Runnable中的同步是当这个线程运行完之后,才能进行其他线性的运行。
    学到的知识:

    synchronized样式:
    synchronized(同步对象){
    需要同步的代码;
    }
    File类:
    public File(String pathname) ->实例化File类的时候,必须设置好路径。
    Windows 中使用反斜杆表示目录的分隔符:""。
    Linux中使用正斜杆表示目录的分隔符:“/”。

  • 相关阅读:
    Adobe官方推荐的ActionScript的最佳做法和编码约定
    从Array extends 时要使用 dynamic 关键字
    java本质——内存分布
    函数参数传递
    AS3.0连接FMS2.0
    C#序列化和反序列化代码
    XmlSerializer 对象的Xml序列化和反序列化
    ASP.NET2.0服务器控件之Render方法
    加密技术在企业数据安全中的应用
    IEnumerable IEnumerator 接口
  • 原文地址:https://www.cnblogs.com/tzmad/p/11723012.html
Copyright © 2020-2023  润新知