标题 | Java多线程产生安全问题及对策分析 |
范文 | 李建辉 引言:在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]. 北京:清华大学出版社 |
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。