<强> 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实际就是在操作系统中启动了一个进程。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。