java并发处理规则
1、创建线程或者线程池的时候指定线程名,以便有问题时回溯。
2、线程资源必须通过线程池提供,不允许在应用中自行显示地创建线程。
3、线程池不允许通过Executors去创建而是通过ThreadPoolExecutor去创建。
4、SimpleDateFormat是线程不安全类,一般不允许定义为static,如果定义必须加锁,或者使用工具类。
5、在高并发时应该去考虑锁的性能损耗,加锁的代码块工作量尽量少。
6、并发更新同一数据时要加锁,要么在应用层加锁,要么在缓存加锁,要么在数据库层使用乐观锁,以version作为依据,如果每次访问冲突的概率小于20%,推荐乐观锁,否则使用悲观锁。乐观锁的重试次数不得小于3次。
7、使用timer运行多个timertask时一个抛出了异常整个task就会停止,推荐使用ScheduledExecutorService。
8、避免Random实例被多线程使用,虽然共享该实例是线程安全的,但会因为竞争同一seed导致性能下降,JDK7之后可以直接使用API ThreadLocalRandom JDK7之前必须保证一个线程独享一个Random实例。
9、基本数据类型是非线程安全的,java也提供了线程安全的基本数据类型:AutomicInteger AutomicLong。
邮箱:wangh_2@sina.com