• 多线程坑及预防


    今天开发组内进行经验交流,一个前辈做的多线程开发讲解让我获益匪浅。

    案例一:做一个定时发送的程序,从数据库中获取复合要求的用户数据,向用户发送信息。程序连续运行一个月都正常,在一个统计周期的最后一天,所有用户都收到了短信,造成了极其恶劣的影响。经过重重排查,发现问题出现在这样一段简单的代码上:

    1 public class Utils{
    2     
    3     private static SimpleDateFormate sdf = new SimpleDateFormate();
    4     
    5     public static void do{
    6         ......
    7     }
    8 } 

    一段常见的代码,声明静态的SimpleDateFormate 类来减少虚拟机开销。但是这也是问题所在:SimpleDateFormate 是线程不安全的,当多线程调用该工具类时,SimpleDateFormate类被多个线程读写,其中的值没有被保护,出现错误。

    解决办法:

    (1)多线程情况下为每个线程创建线程不安全的类的对象,对这段代码,把SimpleDateFormate 放到do()方法里。

    (2)用ThreadLocal类修饰。推荐使用,减少对象的创建。

    案例二:使用线程池创建多线程任务,并通过匿名内部类写任务。通过循环依次创建线程任务,

     这个代码实在是找不到了,直接写结论吧:

    多个线程共同使用一个HashMap对象,对其进行读写操作,出现问题。HashMap对象不是线程安全的,HashTable才是。

    预防措施:

    1.避免并发读写

    2.避免不了,加锁同步(悲观锁)

    3.原子类

    Java高并发编程:原子类

    仅凭这一点分享掌握并发编程技巧是不可能的,但他给我指明了一个技术方向,注重并发编程的学习,先淘本书来系统的学习。

  • 相关阅读:
    Eclipse安装常用离线插件
    Eclipse添加Maven、Jdk、Tomcat
    每天总结模电-去耦电容(一)
    4K显示器含义
    c语言的学习方法
    悲伤逆流成河读后感
    晶体管(三极管,场效应管,MOS以及CMOS)的区别
    强电的元器件认识
    ElasticSearch
    DataGrip
  • 原文地址:https://www.cnblogs.com/cxy2016/p/9230685.html
Copyright © 2020-2023  润新知