为了提升聚类效率,使用多线程是必须的,在此过程中对多线程又多了一些了解

一、多线程中尽量不可大量使用Math.random()。由于Math.random()中会使用CAS机制,所以频繁使用会导致线程执行速度变慢。可自行书写单线程代码和多线程代码测试,产生同样多个随机数,会发现多线程执行速度是慢于单线程的。

二、多线程中不要大量创建对象,具体为什么不是很清楚,可能牵扯到JVM的知识,本人书写的多线程代码中就是由于调用了CollectionsUtils.retainAll(List, List)方法,该方法会产生新的Collection对象,线程执行过程中该方法的调用次数太多,导致了创建的对象过多,以致多线程执行效率慢于单线程。最后使用了一个ThreadLocal保存一个List,重新写了retainAll方法,每次从ThreadLocal中获取List,先clear再使用,多线程执行速度大大提升。

三、聚类数据量大,但是每一次执行的时间较短,只有几十毫秒,而每次执行都使用线程池的commit方法,那么线程执行结束到下次执行中间线程初始化和资源回收等时间就浪费的比较多了,因此,应当把数据分配给线程,或者每个线程去取需要执行的数据,执行完一次之后继续执行,而不是频繁调用commit方法。我的解决方案是使用AtomicInteger来保证不取到相同的数据(数据集是数组)。

转载于:https://www.cnblogs.com/fiftyonesteps/p/11424508.html

一次聚类引发的一系列问题(多线程篇-多线程慢于单线程)相关推荐

  1. iOS开发多线程篇—多线程简介

    iOS开发多线程篇-多线程简介 一.进程和线程 1.什么是进程 进程是指在系统中正在执行的一个应用程序 每一个进程之间是独立的.每一个进程均执行在其专用且受保护的内存空间内 比方同一时候打开QQ.Xc ...

  2. iOS开发多线程篇—多线程简单介绍

    一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcode,系统就会分别启动2个进程 通过& ...

  3. druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索

    druid抛出的异常------javax.management.InstanceAlreadyExistsException引发的一系列探索 参考文章: (1)druid抛出的异常------jav ...

  4. iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列“惨案”

    iOS回顾笔记( 02 ) -- 由九宫格布局引发的一系列"惨案" 前言(扯几句淡先) 回顾到学习UI过程中的九宫格布局时,发现当时学的东西真是不少. 这个阶段最大的特点就是:知识 ...

  5. python中global的使用_PYTHON中使用GLOBAL引发的一系列问题

    In [96]: def x(): b = 12 def y(): global a,b a = 1 b = 2 y() print "b =",b ....: In [97]: ...

  6. Centos 6或7系统 从Kernel panic – not syncing: Attempted to kill init 故障引发的一系列操作

    Centos 6或7系统 从Kernel panic – not syncing: Attempted to kill init 故障引发的一系列操作 Step1 问题描述 Step2 故障处理 St ...

  7. mysql 5.7.18 Can't change dir to引发的一系列问题(初始化data、改root密码)

    mysql忘记root密码需要修改root密码时,使用命令窗口输入mysqld -nt -skip-grant-tables,提示: mysqld: Can't change dir to 'c:\P ...

  8. mysql排序规则引发的一系列问题

    文章目录 mysql排序规则引发的一系列问题 背景 mysql默认的排序方式 mysql默认排序真的是按照主键进行排序的吗? 如何随机获取更优? mysql排序规则引发的一系列问题 背景 项目中提出需 ...

  9. 面试题汇总二 Java 多线程篇

    前言 题目汇总来源 史上最全各类面试题汇总,没有之一,不接受反驳 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题 ...

最新文章

  1. Java 并发/多线程教程(四)-并发模型
  2. 2016年SDN通往成功路的5大步
  3. java课程设计图片浏览器_java课程设计图片浏览器
  4. 4kyu Sum by Factors
  5. java怎么将前端的数据存到关联的表中_Java程序员最可能被考到的14个面试题
  6. 文件服务器共享文件夹访问权限,5对文件服务器中的共享文件夹进行访问权限控制...
  7. TDateTime转
  8. python max((1、2、3)*2)_【Python】python基础2(2)
  9. PoJ3278--Catch That Cow(Bfs)
  10. c语言约瑟夫环分析报告,约瑟夫环C语言实现验证报告.doc
  11. Latex所有常用数学符号整理
  12. excel找出重复值
  13. echarts折线图和柱状图结合绘制
  14. IDEA - 如何安装Statistic代码统计插件?
  15. 7-5 打印选课学生名单(c++)
  16. UEFI.源码分析.DXE阶段的执行
  17. 【RuoYi-Vue-Plus】学习笔记 42 - Easy Excel(二)Excel 2007(*.xlsx)导入流程分析(源码)
  18. 关于投资有哪些不得不读的书籍?
  19. 全球及中国多普勒导航仪行业投资分析及前景预测报告2022-2028年
  20. vscode 结束_VSCode C++ 运行结束马上退出, 窗口一闪而过解决办法, 不修改代码

热门文章

  1. epubjs 在线阅读epub文件
  2. 云存储及其分布式文件系统
  3. Visual Studio 2019 发行说明
  4. 去水印软件哪个好_去水印工具
  5. 【记录】用Python webdriver图书馆抢座自动预约的正确姿势
  6. 【微信小程序】几个常用小功能
  7. 在线查看word,excel,pdf文件解决
  8. 【素描黑白】精致的IU手绘素描源码文件一键领取哦~
  9. golang调用sdl2,键盘和鼠标事件
  10. osg绳索_绳索:理论与实践