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

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

源代码#

public class MyThread implements Runnable {
      private static int tickets=1000;
      
      public void run() {
    	  for(int i=0;i<10000;i++) {
    		  this.sale();
    	  }
      }
	
	public synchronized void sale() {
		if(tickets>0) {
			System.out.println(Thread.currentThread().getName()+"  "+"正在售出第"+tickets--+"张票");
			System.out.println("售票成功!当前余票"+tickets+"张");
		}
			try {
				Thread.sleep(1000);
			}catch(InterruptedException e) {
				e.printStackTrace();
			}
			
		}
	}

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
       MyThread my=new MyThread();
       new Thread(my,"窗口一").start();
       new Thread(my,"窗口二").start();
       new Thread(my,"窗口三").start();
       new Thread(my,"窗口四").start();
       new Thread(my,"窗口五").start();
       new Thread(my,"窗口六").start();
       new Thread(my,"窗口七").start();
       new Thread(my,"窗口八").start();
       new Thread(my,"窗口九").start();
       new Thread(my,"窗口十").start();
	}

}


实验结果#

总结#

编程总结
本周作业在老师讲解之后变得比较简单 加上书上也有类似的题目 主要要了解最近两节课上讲的一些知识点 具体知识点在学习总结里面

学习总结
1.

如果要想正确的启动线程,是不能直接调用run()方法的,应该调用从Thread类中继承而来的start()方法,才可以启动线程。
mt1.start();			// 启动多线程
mt2.start();			// 启动多线程

3.线程操作的相关方法

4.synchronized的用法

•指定加锁对象:对给定对象加锁,进入同步代码前要获得给定对象的锁。 
•直接作用于实例方法:相当于对当前实例加锁,进入同步代码前要获得当前实例的锁。
•直接作用于静态方法:相当于对当前类加锁,进入同步代码前要获得当前类的锁。
5.
在Java中,使用1到10表示线程优先级。一般可以使用Thread内置的三个静态标量表示:
public final static int MIN_PRIORITY = 1;
public final static int NORM_PRIORITY = 5;
public final static int MAX_PRIORITY = 10;
数字越大则优先级越高,但有效范围在1到10之间。下面的代码展示了优先级的作用。高优先级的线程倾向于更快地完成。

6.Thread类和Runnable接口的区别

实际上Thread类和Runnable接口之间在使用上也是有所区别的,如果一个类继承Thread类,则不适合于多个线程共享资源,而实现了Runnable接口,则可以方便的实现资源的共享。
原文地址:https://www.cnblogs.com/lxzlyf2022/p/11722118.html