ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java-多线程-卖票示例(线程安全问题现象及产生原因)

2021-11-06 11:03:28  阅读:170  来源: 互联网

标签: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. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有