zoukankan      html  css  js  c++  java
  • 学习Java高并发需要注意的几个事项

    学习高并发首先要理解高并发的概念。并发是可以使用多个线程或者多个进程,同时处理不同的操作。简单的说来就是只同一个功能,或者说对同一条数据的更改可能是很多个人同时进行。那么此时就会存在数据不同步而导致保持了错误的数据到数据库。比如4个管理员对同一个对一个用户的余额进行修改。主要的话还是要从数据库加锁上来解决。一般都是行级读锁,即在一个时刻只能有一个人拿取此条数据进行修改,待修改完成后提交在释放锁供下一个人获取数据。尚学堂张老师为我们总结了高并发系统的设计和处理方法,简单与大家分享。

    高并发系统的设计需要注意一下几点:

    尽量使用缓存,包括用户缓存,信息缓存等,多花点内存来做缓存,可以大量减少与数据库的交互,提高性能。

    用jprofiler等工具找出性能瓶颈,减少额外的开销。

    优化数据库查询语句,减少直接使用hibernate等工具的直接生成语句(仅耗时较长的查询做优化)。

    优化数据库结构,多做索引,提高查询效率。

    统计的功能尽量做缓存,或按每天一统计或定时统计相关报表,避免需要时进行统计的功能。

    能使用静态页面的地方尽量使用,减少容器的解析(尽量将动态内容生成静态html来显示)。

    解决以上问题后,使用服务器集群来解决单台的瓶颈问题。

    基本上以上述问题解决后,达到系统最优。

    如果低层的连接数过大(如大量的端口占用需求),这种情况下考虑直接C来写,其他的可以用Java来做。

    那么用Java语言如何处理高并发情况呢?下面简单表述一下:

    1.背景描述

    并发就是可以使用多个线程同时处理不同的操作。

    高并发的时候就是有很多用户访问,导致系统数据不正确。对于大型网站,比如门户网站。在面对大量用户访问,高并发请求方面,基本的解决方案集中在这样几个环节,使用高性能的服务器,高性能的编程语言,还有高性能的web容器,这几个解决思路意味着需要投入大量的。

    使用一般的snchronized或者lock 或者队列都是无法满足高并发的情况。

    解决方法有三种:

    1.使用缓存

    2.使用生成静态页面

    html纯静态页面是效率最高,消耗最小的页面。

    3.图片与服务器分离

    4.代码构造的时候尽量避免不必要的资源浪费

    <1>不要频繁的使用new对象,对于在整个应用中只需要存在一个实例的类使用单例模式。对于string的连接操作,使用stringbuffer或者stringbuilder。对于utility类型的类通过静态方法来访问;

    <2>避免使用错误的方式,如exception可以控制方法推出,但是Exception要保留stacktrace消耗性能,除非必要不要使用instanceof做条件判断,尽量使用比的条件判断方式。使用Java中效率高的类,比如arraylist比vector快;

    <3>使用线程安全的集合对象;

    <4>使用线程池。

  • 相关阅读:
    poj 2676 Suduku (dfs)
    poj 1562 Oil Deposits (dfs)
    poj 2907 Collecting Beepers (dfs)
    poj 1655 Balancing Act (树形dfs)
    poj 3411 Paid Roads (dfs)
    hdu 2896 病毒侵袭 (AC)
    hdu 3065 病毒侵袭持续中 (AC)
    poj 2251 Dungeon Master (bfs)
    java中debug使用
    Swing入门级小项目总结
  • 原文地址:https://www.cnblogs.com/martin-roger/p/7504489.html
Copyright © 2011-2022 走看看