标签:java Thread 示例 t1 start 线程 new Ticket 多线程
1 package multithread.test; 2 3 /* 4 * 卖票 5 */ 6 7 8 /* 9 * 线程安全问题产生的原因: 10 * 1,多个线程在操作共享的数据。 11 * 2,操作共享数据的线程代码有多条。 12 * 13 * 当一个线程在执行操作共享数据的多条代码过程中,其他线程参与了运算。 14 * 就会导致线程安全问题的产生。 15 * 16 */ 17 class Ticket implements Runnable {//extends Thread { 18 private /*static*/ int num = 100;//静态是可以的,根据实际看,有可能是这个线程负责这种100张,另一个线程时另一种票100张 19 20 public void run() /*throws 不处理就抛,但是实现接口覆盖的方法,接口没有声明过异常,只能catch不能声明*/{ 21 while(true) { 22 if (num>0) { 23 try { 24 Thread.sleep(10); 25 } catch (InterruptedException e) { 26 // TODO: handle exception 27 } 28 // // 29 System.out.println(Thread.currentThread().getName()+"....sale...."+ num--); 30 } 31 32 } 33 } 34 } 35 36 public class TicketDemo { 37 38 public static void main(String[] args) { 39 // TODO Auto-generated method stub 40 41 Ticket t = new Ticket();//创建一个线程任务对象。 42 43 44 Thread t1 = new Thread(t); 45 Thread t2 = new Thread(t); 46 Thread t3 = new Thread(t); 47 Thread t4 = new Thread(t); 48 49 t1.start(); 50 t2.start(); 51 t3.start(); 52 t4.start(); 53 /* 54 Ticket t1 = new Ticket(); 55 Ticket t2 = new Ticket(); 56 Ticket t3 = new Ticket(); 57 Ticket t4 = new Ticket(); 58 //只有100张,卖了400张,为什么? 59 t1.start(); 60 // t1.start();IllegalThreadStateException-无效线程状态异常是 runtime异常 61 // t1.start(); 62 // t1.start(); 63 64 t2.start(); 65 t3.start(); 66 t4.start(); 67 */ 68 69 70 } 71 //cmd 打印完1在前面 比如43打印在后面, cmd是应用程序,虚拟机也是一个应用程序,cpu也是在这两个中切换造成的 72 }TicketDemo
标签:java,Thread,示例,t1,start,线程,new,Ticket,多线程 来源: https://www.cnblogs.com/doremi429/p/15516153.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。