第七次实验报告及总结

实验任务详情:

完成火车站售票程序的模拟。
要求:
(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();
    
    }
}

实验截图
第七次实验报告及总结_第1张图片

实验总结:

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

学习总结:

在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(){
          线程主体;
     }
}

你可能感兴趣的:(第七次实验报告及总结)