java程序并发遇到的问题
2015-06-30 20:22
330 查看
1. 避免在list上进行remove操作,如果一定要进行必须这么做
Iterator<A> iterator = list.iterator();
while (iterator.hasNext())
{
A temp = iterator.next();
iterator.remove();
}
2. 扩大JVM的内存使用面积
如果建立的是一个网络服务,那么就需要在tomcat或者jetty这种servlet容器的配置文件中加入JVM的内存使用值。
3. 扩大或者减少tomcat或者jetty的线程数
并不是线程越大越适合于并发的环境,有时候线程太多反而会造成程序并发数的降低挂掉。所以有时候完成并发测试需要不断调试线程数目。
4. 避免让静态函数调用静态变量
如果多个需求调用同一个网络服务或者java程序,那么一个静态变量就会被多个需求共享。一旦一个需求修改了这个静态变量,那么其他的需求可能是按照静态变量的改变值来运行网络服务或者程序。比如:有一个静态变量是一个ArrayList,当一个需求在读取list的值时,另外一个需求已经清空了这个list,那么前一个需求在读取过程中就会报错。
如果一定要用到静态变量的值的话,可以重新声明一个同样数据结构的非静态变量,然后把静态变量的值“深度”拷贝到这个新声明的非静态变量。之所以要深度拷贝,是因为如果这个静态变量是个对象的话,当静态变量的值改变了之后,被拷贝的非静态变量也会发生改变,就失去了重新声明的意义了。
Iterator<A> iterator = list.iterator();
while (iterator.hasNext())
{
A temp = iterator.next();
iterator.remove();
}
2. 扩大JVM的内存使用面积
如果建立的是一个网络服务,那么就需要在tomcat或者jetty这种servlet容器的配置文件中加入JVM的内存使用值。
3. 扩大或者减少tomcat或者jetty的线程数
并不是线程越大越适合于并发的环境,有时候线程太多反而会造成程序并发数的降低挂掉。所以有时候完成并发测试需要不断调试线程数目。
4. 避免让静态函数调用静态变量
如果多个需求调用同一个网络服务或者java程序,那么一个静态变量就会被多个需求共享。一旦一个需求修改了这个静态变量,那么其他的需求可能是按照静态变量的改变值来运行网络服务或者程序。比如:有一个静态变量是一个ArrayList,当一个需求在读取list的值时,另外一个需求已经清空了这个list,那么前一个需求在读取过程中就会报错。
如果一定要用到静态变量的值的话,可以重新声明一个同样数据结构的非静态变量,然后把静态变量的值“深度”拷贝到这个新声明的非静态变量。之所以要深度拷贝,是因为如果这个静态变量是个对象的话,当静态变量的值改变了之后,被拷贝的非静态变量也会发生改变,就失去了重新声明的意义了。
相关文章推荐
- Java程序中遇到的乱码问题以及解决方法
- 使用exe4j把JAVA GUI程序打包成exe文件时遇到的问题
- Java程序遇到的问题, 不断更新中
- eclipse在编写Java程序时遇到的问题
- java桌面程序中使用联动菜单遇到与解决的问题
- Java并发小结(在公司遇到并发下问题的总结--1)
- 初学java,写的一个小程序遇到点问题,又碰上论坛关闭,在此上代码,希望能有人帮我看下,多谢
- dos下编译执行java程序遇到的问题
- 配置crontab定时执行调用java程序的shell脚本遇到的问题
- kindeditor引入Java程序遇到的问题
- Java程序操作excel表格时遇到的奇怪问题
- 用java程序向数据库插入数据遇到的几个问题
- Java程序中遇到的乱码问题以及解决方法
- Java程序中遇到的乱码问题以及解决方法
- java.lang.Process调用程序阻塞问题解决(刚刚遇到的问题,看有人解决了,转一下:) )
- Java中ThreadLocal类(解决多线程程序中并发问题的一种新思路,主要为参数的拷贝问题)
- Java程序中遇到的乱码问题以及解决方法
- 小程序发红包 公众号发红包开发中遇到的问题 大并发 频繁提现 刷接口
- window 7 下用MyEclipse编写Java程序连接HBase时遇到的问题
- [Java]命令行模拟TCP客户端与服务端的简单小程序遇到的问题(基础不牢!扎实和亲手实践比什么都重要!)