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

    实验任务详情:

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

    实验代码一:

    public class Mythread<tickets> implements Runnable {         
        private int tickets=1000;             
        private String name;             //对窗口署名
        public Mythread(String name){
            this.setName(name);             //对name属性赋值
        }
        public void run() {              
            for(int i=0;i<1000;i++){      
                synchronized (this){          
                    if(tickets>0){
                        try {
                            Thread.sleep(1000);       
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName()+"正在售票......  售票成功,剩余票:"+tickets--);
                    }
    
                }
    
            }
    
    
        }
    	public String getName() {
    		return name;
    	}
    	public void setName(String name) {
    		this.name = name;
    	}
    }
    

    实验代码二:

    
    public class test {
    	public static void main(String[] args) {
            Mythread my=new Mythread<Object>(null);    
            Thread m1=new Thread(my,"售票口1");
            Thread m2=new Thread(my,"售票口2");
            Thread m3=new Thread(my,"售票口3");
            Thread m4=new Thread(my,"售票口4");
            Thread m5=new Thread(my,"售票口5");
            Thread m6=new Thread(my,"售票口6");
            Thread m7=new Thread(my,"售票口7");
            Thread m8=new Thread(my,"售票口8");
            Thread m9=new Thread(my,"售票口9");
            Thread m10=new Thread(my,"售票口10");    
            m1.start();
            m2.start();
            m3.start();
            m4.start();
            m5.start();
            m6.start();
            m7.start();
            m8.start();
            m9.start();
            m10.start();        //启动线程
        }
    }
    
    

    运行结果截图:

    学习总结:
    1.如果在类里要激活线程,必须先做好下面两项准备:
    (1)此类必须是扩展Thread类,使自己成为它的子类;
    (2)线程的处理必须编写在run方法里面。
    2.run()方法是定义在Thread类里的一个方法,因此把线程的程序代码编写在run()方法内,所做的就是覆写操作;
    3.runnazble接口里申明了抽象的run方法,因此必须在实现Runnable接口的类里明确定义run()方法;
    4.在强制某一线程运行时,采用join()方法,在线程强制运行期间,其他线程无法运行,必须等待此线程完成后才可以继续执行;
    5.当多个线程对象操纵同一个共享资源时,要使用synchronized关键字进行资源的同步处理。
    6.继续撸起袖子加油干!!!

  • 相关阅读:
    剑指OFFER----面试题54. 二叉搜索树的第k大节点
    剑指OFFER----面试题53
    剑指OFFER----面试题53
    DevExpress ASP.NET Core v19.1版本亮点:Visual Studio集成
    Kendo UI for jQuery使用教程:初始化jQuery插件
    代码自动补全插件CodeMix全新发布CI 2019.7.15|改进CSS颜色辅助
    MyEclipse使用教程:使用工作集组织工作区
    DevExpress ASP.NET Core v19.1版本亮点:Pivot Grid控件等
    Kendo UI for jQuery使用教程:小部件DOM元素结构
    MyEclipse使用教程——使用DevStyle Icon Designer(二)
  • 原文地址:https://www.cnblogs.com/huanglexing/p/11737918.html
Copyright © 2011-2022 走看看