Java多线程之火车售票系统

  

<强> Java多线程之火车售票(线程和可运行的区别)

  

java中实现多线程的方式有两种

  
      <李>继承线程类李   <李>实现运行的接口
      李   
  

继承了线程类的类,使用对象.start()启动线程
  实现了可运行的类的类,使用新线程(新Runnable的实现类()).start()启动

  

<强>下面有个经典例子,很适合用实现运行的接口的类去实现。

  

  

1。票数是共用的,不能将一张票买多次。
  2。同时有多个售票点在出售车的票,即有多个线程存在。
  3。当一个售票点正在进行售票操作时,其他售票点不能进行干预,此处可以用同步锁。

  

<强>代码如下:

  

        公开课TicketsTest {   公共静态void main (String [] args) {      SakeTickets圣=new SakeTickets ();   线程[]t=新线程[3];   for (int i=0;我& lt;t.length;我+ +){   t[我]=新线程(st,“售票口”+ (i + 1));   t[我].start ();   }         }   }      

        公共类SakeTickets实现Runnable {   私人int totalTickets=200;      公共空间run () {   而(totalTickets> 0)   销售();   }   公共空间出售(){   同步(){   字符串名称=Thread.currentThread () . getname ();   如果(totalTickets==0)   system . out。println(姓名+”票已售完。”);   其他{   totalTickets——;   尝试{   thread . sleep (57);   }捕捉(InterruptedException e) {   e.printStackTrace ();   }   system . out。printf(名字+”售出一张票,还剩:% 3 d张。\ n”, totalTickets);   }   }   }   }      

<>强和可运行线程的区别

  

如果一个类继承线程,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

  

<强>总结:

  

实现运行的接口比继承线程类所具有的优势:

  

1。适合多个相同的程序代码的线程去处理同一个资源
  2.java中可以避免的单继承的限制
  3.增加程序的健壮性,代码可以被多个线程共享,代码和数据独立
  4.线程池只能放入实现Runable或可调用的类线程,不能直接放入继承线程的类
  

  

主方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。
  在java中,每次程序运行至少启动2个线程。一个是主要线程,一个是垃圾收集线程。因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM实际就是在操作系统中启动了一个进程。

  

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

Java多线程之火车售票系统