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

实验任务详情:
完成火车站售票程序的模拟。
要求:
(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接口可以避免单继承局限,能更好的实现数据共享
两者结构比较:

线程的状态

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

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


自我总结:

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

原文地址:https://www.cnblogs.com/2001guqiu/p/11737638.html