哈哈哈123457
2017-08-30 08:39
采纳率: 100%
浏览 2.0k
已采纳

java 求四千多用户的某一排名 如何用多线程 优化for循环

求四千多用户的某一排名,比如操作次数排名(不考虑sql写法),我先求出所有用户,然后for循环全部用户,得出每一个用户的操作次数,将用户名和对应操作次数放入一个map里面,再把这个map放入一个list里面,最后排出前十名,现在我想用多线程优化for循环,但是多线程的匿名内部类里面的全局变量只能是final的,final变量只能赋值一次啊,我就不能连续添加值到那个list里面了 怎么办?还有比如我现在开四个线程,每个线程for循环一千次,那么我如何写,等到四个线程全部结束再执行下面操作呢?

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

8条回答 默认 最新

  • threenewbee 2017-08-31 00:59
    已采纳
    打赏 评论
  • 我本狂儒 2017-08-30 09:06

    我咋这么懵B呢!你就要前10名,根据操作次数来?是这意思么?这样的你一次for求出所有的时候加个判断操作次数不就直接区分了么?把操作次数作为map的KEY
    就存10个从大向小依次对比,然后如果大于了替换不行么?最多也就一次大循环,一次小循环

    打赏 评论
  • 砸死接触 2017-08-30 09:14

    (⊙﹏⊙)b 楼主这是自己想的东西写着玩的吧?。。。。。为啥要用匿名内部类? 用内部类不就行了吗? 参数不是问题了!!!要想让子线程全部执行完再去执行主线程里的代码,就在主线程(就是你主代码的那个类)定义一个标志位(或符),等待子线程执行完。。。我只能说这也就玩玩!!

    打赏 评论
  • 栗悟饭和龟仙人 2017-08-30 09:18

    从4000个数据中取最大的前10个,用堆比较快,设置一个大小为10的大根堆,不断往堆里push就行了。
    要控制线程的执行顺序,需要用锁。

    打赏 评论
  • doggy1853 2017-08-30 10:59

    用堆是正解,使用一个线程安全的最大堆,起多个线程去计算每个元素的大小值,将计算结果放到堆中,最后遍历堆即可。

    打赏 评论
  • ljheee 2017-08-30 14:15

    四千多用户的某一排名 ,这些信息数据时存数据库的,就从数据库查

    打赏 评论
  • IAmObject 2017-08-31 00:56

    恕我直言,就四千多用户用多线程都是浪费

    打赏 评论
  • 你的睫毛丶 2017-10-17 01:32

    我有个想法,就是是用treemap,将用户类实现Comparable重写compareTo用来比较操作次数
    ,或者使用Comparator比较,在你向集合添加的时候就已经排序了,直接取出前十个就ok

    打赏 评论

相关推荐 更多相似问题