博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于全局变量思考
阅读量:4053 次
发布时间:2019-05-25

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

项目快做完了,在自己偶然的测试中发现了一个问题,程序中有两处用到了全局变量,这样不同的用户点击就会修改全局变量的值,导致查看的结果与预期大相径庭,后来网上查了下,遇到这样的问题还不少,最后得出的结论是:禁用全局变量,或者只使用final static的全局变量,只读取,不修改。

下面引用某一篇贴子里面的内容:

想要实现类似全局变量非得用静态方法吗?多用户同时提交的冲突怎么解决呢?

比如我要定义一个ArrayList类型的全局变量,要在程序里几个互不相关的方法里操作它。用静态变量或静态方法的话,当A、B两个用户同时操作时,A向ArrayList插入2个对象;B插入3个对象。那当A/B提交时ArrayList里就有5个对象了。。请问有什么办法既可以实现类似全局变量的功能,又可以避免多用户同时操作的冲突呢?

 

某大牛的回复:

对于你来说最多的答案应该是 Session[.....]

不过,我不会使用这类东西。让我们退回到你说的static变量看看,可能你不知道(!),如果web应用部署在空间商虚拟主机上,应用程序进程进程经常因为服务器或者iis或者asp.net系统维护功能被回收(重启),于是static变量、Session集合、Application集合等都“丢失”了。这是你在自己的电脑上写点小程序时所想不到的,你应该已开始就花100、200块钱租一个空间一边开发一边把asp.net应用放到真正的外部服务器上去测试,才能发现这类问题。
面对这类问题,如果你要求开发一个稳定的应用程序,你就不会轻易把什么数据依赖于static、Session集合这种方式保存,而是会考虑数据持久化、Cache加速这类机制。当然,专业开发人员从客观的生产服务器的特性为编程基础,而初学者只要在自己的电脑为基础学点编程语法可能就满足了。

 

网站并发访问与全局变量

/** * 本例演示:对于电子商务网站销售商品,多用户并发抢购一种商品时候发生的事情。 * 它说明一个问题,可能你先点了,但不一定抢购得到。宏观上是先来先执行,微观上是虚拟机先择谁执行谁。 * 用java实现的话,多用户点击相当于多线程。但多线程如何调度(排队)执行的?他是由虚拟机来实现的,应用程序无法控制。 *  * @author chengzhong * */public class TestNum { static int n=100;//库存 /**  * @param args  */ public static void main(String[] args) {  for(int i=0;i<110;i++){   new Thread(){    public void run(){     try {      TestNum.sub();     } catch (InterruptedException e) {            e.printStackTrace();     }    }   }.start();  } } public synchronized static void sub() throws InterruptedException{  n-=1;  if(n>0){   System.out.println(Thread.currentThread().getName()+":"+n);  }else{   System.out.println(Thread.currentThread().getName()+":没抢到!");  }  //Thread.sleep(500);   }}

 

 

 

 

转载地址:http://yuxci.baihongyu.com/

你可能感兴趣的文章
在Spring Boot框架下使用WebSocket实现消息推送
查看>>
在Spring Boot框架下使用WebSocket实现聊天功能
查看>>
快捷键
查看>>
如何防止过拟合
查看>>
linux对于没有写权限的文件如何保存退出vim
查看>>
类加载器的工作原理
查看>>
JVM 垃圾回收机制主要原理
查看>>
java工程师的职业规划
查看>>
Windows下安装ElasticSearch6.3.1以及ElasticSearch6.3.1的Head插件
查看>>
IntelliJ IDEA 下集成SVN
查看>>
IntelliJ IDEA 下的svn配置及使用的非常详细的图文总结
查看>>
【IntelliJ IDEA】idea导入项目只显示项目中的文件,不显示项目结构
查看>>
itellij idea导入web项目并部署到tomcat
查看>>
java.lang.ClassNotFoundException: com.sun.xml.ws.transport.http.servlet.WSServletContextListener
查看>>
Java compiler level does not match解决方法
查看>>
数据库事务的四大特性以及事务的隔离级别
查看>>
事务的四种隔离级别和七种传播机制
查看>>
spring的4种事务特性、4种隔离级别、7种传播行为
查看>>
MySQL 8.0.12安装教程(windows 64位)
查看>>
IntelliJ IDEA 乱码解决方案 (项目代码、控制台等)
查看>>