多线程使用体会

最近做了一个项目使用多线程非常频繁,总结一下使用遇到的问题和解决办法

 

1、当然是线程要用线程池管理,这样会使资源分配合理,比如我在项目中用多线程读取文件,a、有可能使有些文件已经读取快结束了,而有些文件还没开始读取;b、批量处理文件时,如果没有使用线程池,就可能使cpu使用率为100%,机器基本什么都不能干了,而且执行效率并不一定比线程管理下的线程执行效率高。

 

2、多线程使用的资源尽量不使用公共资源,可以用局部变量代替,公共资源很容易引起死锁或者,管理不当使得结果错误,局部变量就不会有这种情况,当内存不够用时,Java内存管理器会把无用的内存释放,所以我们不用担心创建对象过多,当然,如果必须用为公用资源的话,也要公用资源。

 

3、Timer定时管理器和ScheduledFutured线程池的区别

  a、Timer是单线程执行,任务时串行执行,ScheduledFutured是多线程执行任务;

  b、Timer可以通过task.canel()方法取消任务,ScheduledFutured需要通过获取线程执行的结果ScheduledFuture<?>类来取消任务执行;

  c、Timer执行任务超时,下次执行任务会把时间赶回来,就是执行时间不会有偏差,但是ScheduledFutured执行任务如果有上次任务没有执行完,下次就会推迟执行,以至于以后每个周期都会向后推迟。

 

4、多线程中执行关于时间的处理,

  a、如果使用Timer的话,最好在刚执行的时候就记录下时间,如果调用其他函数,则把时间传进去,这样时间比较精确不会有偏差;

  b、如果使用ScheduledFutured执行周期任务的话,最后把周期的时间先生成,任务类依次读取,否则很可能造成时间差;

  c、总之,如果时间最好不要在用的时候才去获取,要先获取时间传给需要使用的方法;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值