博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
线程安全的小例子
阅读量:6913 次
发布时间:2019-06-27

本文共 1587 字,大约阅读时间需要 5 分钟。

class ThreadTest extends Thread{    static int ticketNum = 50; //一定要设置为静态变量,这样多个对象实例共享的是一份数据,操作的也是同一份数据        public ThreadTest(String name) {        // TODO Auto-generated constructor stub        super(name);    }    @Override    public void run() {        // TODO Auto-generated method stub        super.run();        while(true){                if(ticketNum>0){                    System.out.println(this.getName()+"售出了第"+(50-ticketNum+1)+"张票");                    ticketNum --;                }else{                    System.out.println("卖完了.....");                    break;                }        }        }            }
//main方法	public static void main(String[] args) {		ThreadTest t1 = new ThreadTest("窗口1");		ThreadTest t2 = new ThreadTest("窗口2");		ThreadTest t3 = new ThreadTest("窗口3");		t1.start();		t2.start();		t3.start();	}

  

我们看看结果窗口2售出了第1张票窗口1售出了第1张票窗口1售出了第3张票窗口3售出了第1张票窗口1售出了第4张票窗口2售出了第2张票窗口1售出了第6张票窗口3售出了第5张票窗口1售出了第8张票窗口2售出了第7张票窗口1售出了第10张票窗口3售出了第9张票窗口1售出了第12张票窗口2售出了第11张票窗口1售出了第14张票窗口3售出了第13张票窗口1售出了第16张票窗口2售出了第15张票窗口1售出了第18张票窗口3售出了第17张票窗口1售出了第20张票窗口2售出了第19张票窗口1售出了第22张票窗口3售出了第21张票窗口1售出了第24张票窗口2售出了第23张票窗口1售出了第26张票窗口3售出了第25张票窗口1售出了第28张票窗口2售出了第27张票窗口1售出了第30张票窗口3售出了第29张票窗口1售出了第32张票窗口2售出了第31张票窗口1售出了第34张票窗口3售了第33张票窗口1售出了第36张票窗口2售出了第35张票窗口1售出了第38张票窗口3售出了第37张票窗口1售出了第40张票窗口2售出了第39张票窗口1售出了第42张票窗口3售出了第41张票窗口1售出了第44张票窗口2售出了第43张票窗口1售出了第46张票窗口3售出了第45张票窗口1售出了第48张票窗口2售出了第47张票窗口1售出了第50张票卖完了.....窗口3售出了第49张票卖完了.....卖完了.... //结果中我们可以看到有的同一张票被卖出了两次,这就是不同的线程在访问共享数据时容易出现的问题,由于上一线程的操作未结束,下一线程又进行操作,就造成数据更新不及时,也就出现了线程的安全问题。

转载于:https://www.cnblogs.com/it-life-nathan/p/6888660.html

你可能感兴趣的文章
Does the parameter type of the setter match the return type of the getter?
查看>>
MongoDB count distinct group by JavaAPI查询
查看>>
Java多线程系列——原子类的实现(CAS算法)
查看>>
LibEvent代码阅读--多缓冲区和零拷贝技术
查看>>
学生管理系统报错(一)
查看>>
使用 Live555 搭建流媒体服务器
查看>>
第十四周(OOP版电子词典)
查看>>
网络基础知识小小说
查看>>
linux lsof命令详解
查看>>
POJ 1163 The Triangle【dp+杨辉三角加强版(递归)】
查看>>
vue如何在路由跳转的时候更新组件
查看>>
Java多线程(二)
查看>>
《深入浅出数据分析》读后具体解释
查看>>
C++中的异常安全性
查看>>
Xcode中的变量模板(variable template)的使用方法
查看>>
java POI实现Excel单元格数据换行
查看>>
python3第一次作业
查看>>
国内物联网平台初探(三) ——QQ物联·智能硬件开放平台
查看>>
Python开源框架、库、软件和资源大集合
查看>>
透过IL看C# 开篇
查看>>