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


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

    1.实验代码:

    public class Mythread<tickets> implements Runnable {         //实现Runnable接口
        private int tickets=1000;               //一共1000张票
        private String name;             //对窗口署名
        public Mythread(String name){
            this.name=name;             //对name属性赋值
        }
        public void run() {               //覆写run()方法
            for(int i=0;i<1000;i++){      //超出票数的循环
                synchronized (this){          //设置需要同步的操作
                    if(tickets>0){
                        try {
                            Thread.sleep(1000);       //加入延迟 1秒
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        System.out.println(Thread.currentThread().getName()+"正在售票......  售票成功,剩余票:"+tickets--);
                    }
    
                }
    
            }
    
    
        }
    }
    public class Test {
        public static void main(String[] args) {
            Mythread my=new Mythread(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");    //定义Thread对象
            m1.start();
            m2.start();
            m3.start();
            m4.start();
            m5.start();
            m6.start();
            m7.start();
            m8.start();
            m9.start();
            m10.start();        //启动线程
        }
        }
    

    2.实验结果截图


    实验总结:

    这个实验老师上课的时候讲过,而且书上也有实例,我添加了一个name属性。我一开始也出现了卖负数票的情况,后面检查一下发现是自己输出那里有点问题,
    改了一下就好了。

    课程总结:

    1.Java中线程的实现

    方法一:继承Thread类
    定义格式:
    一个类只要继承了Thread类,就称为多线程操作类。且在Thread子类中,必须明确的覆写Thread类中的run()方法。
    启动线程应调用start()方法。
    方法二:实现Runnable接口
    定义格式:
    两种方法的区别:
    Thread类中的run方法调用的是Runnable接口中的方法,故如果使用Thread方法实现多线程的话则必须要覆写run()方法。且
    使用Runnable接口可以避免单继承局限,能更好的实现数据共享
    两者结构比较:

    线程的状态

    线程分为五个状态,分别是创建状态,就绪状态,运行状态,堵塞状态和死亡状态。如图:

    线程操作的一些相关方法:


    自我总结:

    这周学老师上课讲的时候听的不怎么懂,可是自己看书巩固了一下敲了一下代码,感觉还是可以吧!但还有些难题和问题待解决,
    在后面的学习继续加油吧!!!!

  • 相关阅读:
    hdoj2159【二位费用背包】
    POJ2367【拓扑排序】
    POJ2371【水题】
    POJ2369【循环节】
    POJ2370【水题】
    POJ2365【几何】
    POJ2366【二分】
    POJ1276【多重背包】
    瞎说一波3种基本背包问题【希望巨巨们指出错误】
    Codeforces 550B 【暴力】
  • 原文地址:https://www.cnblogs.com/2001guqiu/p/11737638.html
Copyright © 2020-2023  润新知