首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

判别线程安全-共享变量与单实例

2013-12-28 
识别线程安全-共享变量与单实例public class JavaBean {private String mynamepublic void aservice(Stri

识别线程安全-共享变量与单实例
public class JavaBean {private String myname;public void aservice(String paraName,int otherPara){//在spring的默认配置下在这里设值,另一个方法使用是错误的this.myname=paraName;bservice();}private void bservice() {String goodName= this.myname;//other work}public String getMyname() {return myname;}public void setMyname(String myname) {this.myname = myname;}}

如果有两个线程A和B,同时进入aservice,A线程设置myname="AName",然后在执行到bservice线程阻塞,此时B线程进入,将myname="BName",然后进入bservice得出正确结果而退出。B线程执行后,myname="BName",A线程恢复,在bservice的方法执行时,使用的myname="BName",计算肯定会出错。但如果你每次使用JavaBean的时候,都是new一个,就不会存在线程安全的问题了。

?

?

虽然线程安全是一个不是很容易理解的话题,但上面两个例子却反映了两个最普遍的线程安全问题。遇到线程问题,最快的解决方法就是去掉变量共享。单线程的程序,永远不会出现线程安全问题。

?

?

?

?

?

热点排行