java SE程序关于高并发的注意事项

最近做一个java SE程序。使用线程池进行高并发任务的处理。其中任务处理过程中会有查询数据库操作,导致任务处理非常迟缓。于是在网上查找资料。最终解决现在把有关的注意事项进行总结。一、关于线程池的注意事项。对于多个任务,线程池最好不要公用。应该把线程池分开关于线程池的代码

</pre><pre code_snippet_id="547077" snippet_file_name="blog_20141209_1_7940215" name="code" class="java">import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class ChangeThreadPool {
	private static Logger logger = LoggerFactory.getLogger(ChangeThreadPool.class);
	private static ThreadPoolExecutor executor = null; // 声明一个线程池
	private static int coreSize = 100; // 核心线程数
	private static int maxSize = 150; // 最大线程数
	private static final int KEEP_ALIVE_TIME = 60; // 生存周期

	public ChangeThreadPool() {

	}

	public synchronized void syncInit() {
		executor = new ThreadPoolExecutor(coreSize, maxSize, KEEP_ALIVE_TIME,TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
	}

	public static ExecutorService getInstance() {

		if (executor == null) {
			logger.debug(">>>threadPool线程池为空!");
			ChangeThreadPool pool = new ChangeThreadPool();
			pool.syncInit();
		}
		return executor;
	}
}

二、数据库注意事项

(1)对于频繁查找数据库的操作最好加上缓存,根据实际情况必须查询数据库的则必须查找

(2)最重要的一点就是数据库cpu使用率一直在100%的情况。因为高并发导致频繁查询数据库导致数据库cpu居高不下。这种情况非常有可能是查询语句中没有添加索引导致的,所以应该检查您的所有查询语句的where条件是否都添加了索引。加完索引基本就可以解决问题。

个人总结一下。免得以后写类似的程序又忘了

时间: 2024-10-11 22:00:28

java SE程序关于高并发的注意事项的相关文章

Java大型互联网-构建高并发和高可用的电商平台架构实践原理

并发,在操作系统中,是指一个时间段中有几个程序都处于已启动运行到运行完毕之间,且这几个程序都是在同一个处理机上运行,但任一个时刻点上只有一个程序在处理机上运行. "高可用性"(High Availability)通常来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性. 一. 设计理念 1. 空间换时间 多级缓存,静态化 客户端页面缓存(http header中包含Expires/Cache of Control,last modified(304,server不返

linux下高并发网络应用注意事项

本文转自:http://www.blogjava.net/bacoo/archive/2012/06/11/380500.html linux下高并发网络应用注意事项 vi /etc/sysctl.conf,加入以下内容:net.ipv4.tcp_tw_reuse=1 #表示开启重用.允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭net.ipv4.tcp_tw_recycle=1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表

java架构师,高并发,分布式,集群,大型高并发电商项目实战视频教程

15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程内容包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.to

16套java架构师,高并发,高可用,高性能,集群,大型分布式电商项目实战视频教程

16套Java架构师,集群,高可用,高可扩展,高性能,高并发,性能优化,设计模式,数据结构,虚拟机,微服务架构,日志分析,工作流,Jvm,Dubbo ,Spring boot,Spring cloud, Redis,ActiveMQ,Nginx,Mycat,Netty,Jvm,Mecached,Nosql,Spring,大型分布式项目实战视频教程 视频课程包含: 高级Java架构师包含:架构师,高并发,分布式,集群,高可用,高可扩展,高性能,设计模式,数据结构算法,虚拟机,微服务架构,日志分析,

JAVA中怎么处理高并发的情况

一.背景综述 并发就是可以使用多个线程或进程,同时处理(就是并发)不同的操作. 高并发的时候就是有很多用户在访问,导致系统数据不正确.糗事数据的现象.对于一些大型网站,比如门户网站,在面对大量用户访问.高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器.高性能的数据库.高效率的编程语言.还有高性能的Web容器.这几个解决思路在一定程度上意味着更大的投入. 使用一般的synchronized或者是lock或者是队列都是无法满足高并发的问题. 二.解决方法有三: 1.使用缓存 2.

《JAVA——帮你解决高并发秒杀》

[准备] 首先我们要考虑的是为什么要解决高并发,高并发瓶颈出现在哪里,有了解过的朋友肯定知道是在数据库,因为在大量请求去操作数据库时会出现数据的错乱,超卖,系统崩溃,mysql死锁等现象. [思路] (一). 页面静态化:就是将整个页面存储到redis中,下次访问时去读取redis中的页面值 (二).主要对整个网站的静态资源文件进行加速,如图片,css,js等 (三).数学验证码:用户在计算验证码结果时可以减少大量请求同时进入,减少redis, mysql,服务器的压力. (四).库存标识:这是

java服务器集群高并发场景下发布导致load高的解决方案

我们的java服务器集群在发布的时候,会出现刚发布的服务器load飙高(超过cpu核数)的问题,过几分钟才能回到低位,分析了好久也没发现什么原因. 经过查阅相关资料,我们意识到jvm在刚启动时,性能并不是最好的状态,在随后的运行过程中,它会自动分析热点(运行频率高的的代码),并对热点代码进行优化,所以jvm运行一段时间后才能获得较好的性能.这个问题在体量较小的应用中无法体现,当qps达到较高水平时,才会出现这个问题. 但网上查到的资料也就到这里了,并没有给出解决方案.于是综合自己的思考,以及与某

配置开发支持高并发TCP连接的Linux应用程序全攻略

http://blog.chinaunix.net/uid-20733992-id-3447120.html http://blog.chinaunix.net/space.php?uid=16480950&do=blog&id=103598 原文见:http://www.cppblog.com/flashboy/articles/47012.html1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到

Linux下高并发socket最大连接数所受的各种限制(详解)

1.修改用户进程可打开文件数限制 在Linux平台上,无论编写客户端程序还是服务端程序,在进行高并发TCP连接处理时,最高的并发数量都要受到系统对用户单一进程同时可打开文件数量的限制(这是因为系统为每个TCP连接都要创建一个socket句柄,每个socket句柄同时也是一个文件句柄).可使用ulimit命令查看系统允许当前用户进程打开的文件数限制: [[email protected] ~]$ ulimit -n1024 这表示当前用户的每个进程最多允许同时打开1024个文件,这1024个文件中