APP下载

Java多线程产生安全问题及对策分析

2016-11-02李建辉

中国新通信 2016年18期
关键词:清华大学出版社线程示例

李建辉

引言:在Java语言程序设计中, 多线程的并发执行可以提高程序的运行效率,但是,当多线程去访问同一个资源时,可能会引发安全问题,特别是用到线程休眠的时候,容易出现安全问题,为了解决这样的问题,第一尽量不要使用线程休眠,第二种方法是使用线程同步,限制某个资源在同一时刻只能被一个线程去访问。

一、程序示例1

我们写一个简单卖票程序,使用多线程去卖10张票,4个窗口卖10张票,我们给出第一个Java多线程程序代码及运行结果:

运行结果:

窗口1-----卖出的票9 窗口3-----卖出的票8 窗口4-----卖出的票7 窗口1-----卖出的票6窗口2-----卖出的票5 窗口3-----卖出的票4 窗口4-----卖出的票3窗口2-----卖出的票2

窗口1-----卖出的票1 窗口3-----卖出的票0 窗口4-----卖出的票-1 窗口2-----卖出的票-2

结果分析:出现卖出的票0,-1,-2张票,很显然不符合逻辑,原因在于线程休眠Thread.sleep(10)语句,当前线程进入休眠,但是CPU不会休息,马上会调入其他线程来处理,可是当前线程并没有处理完毕(卖出票),造成还有多余的票没有卖完,并由其他线程去卖(出现0,-1,-2张票)。如果没有线程休眠语句,运行结果符合逻辑,不会出现0,-1,-2张票。

二、程序示例2

同样写一个简单的多线程卖票程序,使用线程同步来处理共享资源块,使用Java关键字synchronized来写一个同步方法来卖票,该同步方法在同一时刻只能由一个线程来访问,其他线程等待,保证了资源的安全性。

结果分析:很显然运行结果符合我们的逻辑。

三、Java多线程产生安全性问题总结

Java多线程产生的安全性问题,使用同步方法能解决很好的解决多线程安全问题,特别是解决了多线程同时访问共享数据时产生的安全问题,这就需要我们在代码设计上入手,养成良好的编码习惯和规范。

参 考 文 献

[1]传智播客高教产品研发部 .java基础入门.清华大学出版社

[2] Eric. Java编程思想[M]. 第4版. 机械工业出版社

[3]王保罗.Java面向对象程序设计[M]. 北京:清华大学出版社

猜你喜欢

清华大学出版社线程示例
处理器核心数量排行
Desperate Love towards the Dark Lady in Shakespeare’s Sonnets
Appreciation of “August” by Charles Dickens from the Angle of Deviation
《秘书工作手记》
10秒记忆
飞吧,云宝
采用ScheduledThreadPoolExecutor执行定时重试任务时内存溢出的分析及解决
《中考“仿写”题解题技法指津》参考答案
高考作文“踮起脚尖”升格示例
Pronunciation in English Pedagogy in China