第七次实验报告及总结

实验任务详情:

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

实验代码

package Demo6;

class MyThread implements Runnable{
	private int ticket=1000;
	public void run() {
		for(int i=0;i<10000;i++) {
			this.sale();
		}
	}    
public synchronized void sale() {
			if(ticket>0) {
			  try {
				  Thread.sleep(1000);
			  }catch(Exception e) {
				  e.printStackTrace();
			  }
			  System.out.println(Thread.currentThread().getName()+"运行,i="+ticket--);
	    }
   }
};
public class Pluto {
	public static void main(String[] args) {
		MyThread my=new MyThread();
		new Thread(my,"窗口A").start();
		new Thread(my,"窗口B").start();
		new Thread(my,"窗口C").start();
		new Thread(my,"窗口D").start();
		new Thread(my,"窗口E").start();
		new Thread(my,"窗口F").start();
		new Thread(my,"窗口G").start();
		new Thread(my,"窗口H").start();
		new Thread(my,"窗口I").start();
		new Thread(my,"窗口J").start();
	
    }
}

实验截图

实验总结:

本周的实验题目在书上有相关的代码,我的代码是按照书上的来写的,改了一些需要修改的地方。
个人感觉如果要多线程进行售票,应该需要用到死锁,但是不会用。

学习总结:

在Java中,实现多线程代码有两种方式:一种是继承Thread类;另一种是实现Runnable接口。

继承Thread类

多线程的定义语法:

class 类名称 extends Thread{
      属性***;
      方法***;
      public void run(){
           线程主体;
      }
}

如果想正确的启动线程,是不能直接调用run()方法的,而是应该调用从Thread类中继承而来的start()方法。

在线程启动时虽然调用的start()方法,但实际上调用的是run()方法的主体。

实现Runnable接口:

在java中也可以通过实现Runnable接口的方式实现多线程。此接口定义如下:

public interface Runnable{
    public void run();
}

通过Runnable接口实现多线程:

class 类名称 implements Runnable{
     属性***;
     方法***;
     public void run(){
          线程主体;
     }
}
原文地址:https://www.cnblogs.com/hltltp/p/11723098.html