1、如果不使用框架,纯原生Java编写,是需要了解Java并发编程的,主要就是学习Doug Lea开发的那个javautilconcurrent包下面的API;
2、如果使用框架,那么我的理解,在代码层面确实不会需要太多的去关注并发问题,反而是由于高并发会给系统造成很大压力,要在缓存、数据库 *** 作上要多加考虑。
3、但是即使是使用框架,在工作中还是会用到多线程,就拿常见的CRUD接口来说,比如一个非常耗时的save接口,有多耗时呢?我们假设整个save执行完要10分钟,所以,在save的时候,就需要采用异步的方式,也就是单独用一个线程去save,然后直接给前端返回200。
1、最基础的问题是看数据查询时过滤的字段是否已经建立索引了
2、若是对于数据时效性要求不高的话,可以加一层缓存读(redis)
3、数据库层可以建立从库,把读分离出来用从库读
数据库连接已设置为了1000,说明你的软件设计方法不对,
类似的情况只用1个数据库连接或几个就够了,
参考中间件设计或MIDAS设计,类似数据库做个Pool的处理方法,
而不是让软件直连数据库
首先synchronized不可能做到对某条数据库的数据加锁。它能做到的只是对象锁。
比如数据表table_a中coloum_b的数据是临界数据,也就是你说的要保持一致的数据。你可以定义一个类,该类中定义两个方法read()和write()(注意,所有有关该临界资源的 *** 作都定义在这个类中),再定义一个静态变量作为锁就可以了。
public static final String LOCK = "table_a_b_lock";
public int read(){
synchronized LOCK{
Systemoutprintln("read data");
}
}
public void write(String data){
synchronized LOCK{
Systemoutprintln("write data:" + data);
}
}
另外,还可以在数据库级别加上锁。数据库本来就支持不同的隔离级别。
一、背景综述
并发就是可以使用多个线程或进程,同时处理(就是并发)不同的 *** 作。
高并发的时候就是有很多用户在访问,导致系统数据不正确、糗事数据的现象。对于一些大型网站,比如门户网站,在面对大量用户访问、高并发请求方面,基本的解决方案集中在这样几个环节:使用高性能的服务器、高性能的数据库、高效率的编程语言、还有高性能的Web容器。这几个解决思路在一定程度上意味着更大的投入。
使用一般的synchronized或者是lock或者是队列都是无法满足高并发的问题。
二、解决方法有三:
1使用缓存
2使用生成静态页面
html纯静态页面是效率最高、消耗最小的页面。我们可以使用信息发布系统来实现简单的信息录入自动生成静态页面,频道管理、权限管理和自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的信息发布系统CMS是必不可少的。
3服务器分离
是最消耗资源的,僵和页面分离可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为问题而崩溃。
3写代码的时候减少不必要的资源浪费:
不要频繁得使用new对象,对于在整个应用中只需要存在一个实例的类使用单例模式对于String的连接 *** 作,使用StringBuffer或者StringBuilder对于utility类型的类通过静态方法来访问。
避免使用错误的方式,如Exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用 instanceof做条件判断,尽量使用比的条件判断方式使用JAVA中效率高的类,比如ArrayList比Vector性能好。)
使用线程安全的集合对象vector hashtable
使用线程池
JVM
JEE容器中运行的JVM参数配置参数的正确使用直接关系到整个系统的性能和处理能力,JVM的调优主要是对内存管理方面的调优,优化的方向分为以下4点:
1HeapSize 堆的大小,也可以说Java虚拟机使用内存的策略,这点是非常关键的。
2GarbageCollector 通过配置相关的参数进行Java中的垃圾收集器的4个算法(策略)进行使用。
3StackSize 栈是JVM的内存指令区,每个线程都有他自己的Stack,Stack的大小限制着线程的数量。
4DeBug/Log 在JVM中还可以设置对JVM运行时的日志和JVM挂掉后的日志输出,这点非常的关键,根据各类JVM的日志输出才能配置合适的参数。
网上随处可见JVM的配置技巧,但是我还是推荐阅读Sun官方的2篇文章,可以对配置参数的其所依然有一个了解
1Java HotSpot VM Options
Java HotSpot VM Options
2Troubleshooting Guide for Java SE 6 with HotSpot VMTroubleshooting Guide for Java SE 6 with HotSpot VM
另外,我相信不是每个人攻城师都是天天对着这些JVM参数的,如果你忘记了那些关键的参数你可以输入Java -X(大写X)进行提示。
JDBC
针对MySQL的JDBC的参数在之前的文章中也有介绍过,在单台机器或者集群的环境下合理的使用JDBC中的配置参数对 *** 作数据库也有很大的影响。
一些所谓高性能的 Java ORM开源框架也就是打开了很多JDBC中的默认参数:
1例如:autoReconnect、prepStmtCacheSize、cachePrepStmts、useNewIO、blobSendChunkSize 等,
2例如集群环境下:roundRobinLoadBalance、failOverReadOnly、autoReconnectForPools、secondsBeforeRetryMaster。
具体内容可以参阅MySQL的JDBC官方使用手册:
>
分2分情况:
一普通的单应用并发,使用关键字synchronized就可以实现。
二多应用或多台并发,这时在由于2者并非同一应用,使用synchronized并不能满足要求。此时,有下面几种方案:
数据库行级锁,优点是简单粗暴,缺点是容易死锁,非数据库专业人事建议不使用。
写入请求分离成一个独立项目,这就回到了第一种情况,优点是实现技术难度低,缺点是高并发性能相对不是很高。
使用分布式事务管理,这个是目前高并发处理的最优方案了。
最后要说的没有差的方案,每个方案都有其适用环境,请根据自身需求选择对应方案。
以上就是关于Java高并发入门要怎么学习全部的内容,包括:Java高并发入门要怎么学习、JAVA开发在高并发访问下,数据返回速度很慢,有些甚至一直在转圈,该怎么解决,麻烦大神们给些帮助。、java 高并发大量采集数据该如何去做等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)