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

实验任务详情:

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

 一.实验代码

package shiyan;

 class MyThread implements Runnable {
        private int tickets=1000;
 
@Override
public void run() {
    // TODO Auto-generated method stub
    for(int i=0;i<100;i++) {
        synchronized(this) {
        
        
        
            // TODO Auto-generated method stub
            if(tickets>0) {
                try {
                    Thread.sleep(1000);
                }
                catch(InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("卖票:ticket"+tickets--);
            }
            
        }
    
    }
}
 }
package shiyan;

public class Test6 {

    public static void main(String[] args) {
        MyThread mt=new MyThread();
    Thread t1=new Thread(mt,"窗口1");
    Thread t2=new Thread(mt,"窗口2");
    Thread t3=new Thread(mt,"窗口3");
    Thread t4=new Thread(mt,"窗口4");
    Thread t5=new Thread(mt,"窗口5");
    Thread t6=new Thread(mt,"窗口6");
    Thread t7=new Thread(mt,"窗口7");
    Thread t8=new Thread(mt,"窗口8");
    Thread t9=new Thread(mt,"窗口9");
    Thread t10=new Thread(mt,"窗口10");
t1.start();
t2.start();
t3.start();
t4.start();
t5.start();
t6.start();
t7.start();
t8.start();
t9.start();
t10.start();
    }

}

二、实验结果截图

 三、实验总结:

1.使用同步方法解决以上问题

(1) synchronized
(2)

 2.为什么我周围的一些人说这是一个很简单的作业?我是照着书写的。。

四、我的学习总结:

1.线程的创建状态

 

2.线程操作的主要方法

 

 

3.主线程有可能比其他线程先执行完。

4.线程的休眠:Thread.sleep()与线程调度器交互,在指定的时间内将当前线程作为等待状态放入,一旦等待时间结束后,线程状态变为可运行状态,并等待CPU进一步执行。所以当前线程的实际休眠时间依赖于线程调度器和一部门操作系统。

 5.当一个线程运行的时候,另外一个线程可以直接通过interrupt()方法,中断其运行状态。

6.线程的礼让使用yield()方法将一个线程的操作暂时让给其他线程执行。

原文地址:https://www.cnblogs.com/Markming/p/11725653.html