新大陆--多线程--进阶1

第一为什么要学习它
在Java5之后,并发线程这块发生了根本的变化,最重要的莫过于新的启动、调度、管理线程的一大堆API了。在Java5以后,通过Executor来启动线程比用Thread的start()更好。在新特征中,可以很容易控制线程的启动、执行和关闭过程,还可以很容易使用线程池的特性。

使用多线程前提条件

(1)任务具有并发性,即任务可以拆分为多个子任务,并发执行

(2)只有在CPU是性能瓶颈的情况下,多线程才能实现提升性能的目的。比如一段程序,瓶颈在于IO操作,那么把这个程序拆分到2个线程中执行,也是无法提升性能的

(3)CPU必须是多核的
## 第二使用场景
1. 常见的浏览器、Web服务(现在写的web是中间件帮你完成了线程的控制),web处理请求,各种专用服务器(如游戏服务器) 
 2. servlet多线程 FTP下载,多线程操作文件 数据库用到的多线程 分布式计算
 3. tomcat,tomcat内部采用多线程,上百个客户端访问同一个WEB应用,tomcat接入后就是把后续的处理扔给一个新的线程来处理,这个新的线程最后调用我们的servlet程序,比如doGet或者dpPost方法
 4. 后台任务:如定时向大量(100W以上)的用户发送邮件;定期更新配置文件、任务调度(如quartz),一些监控用于定期信息采集
 5. 自动作业处理:比如定期备份日志、定期备份数据库 异步处理:如发微博、记录日志
 6. 页面异步处理:比如大批量数据的核对工作(有10万个手机号码,核对哪些是已有用户) 数据库的数据分析(待分析的数据太多),数据迁移
 7. 多步骤的任务处理,可根据步骤特征选用不同个数和特征的线程来协作处理,多任务的分割,由一个主线程分割给多个线程完成
 8. desktop应用开发,一个费时的计算开个线程,前台加个进度条显示
 9.  swing编程

代码思想
一、创建任务
 
任务就是一个实现了Runnable接口的类。
创建的时候实run方法即可。
 
二、执行任务
 
通过java.util.concurrent.ExecutorService接口对象来执行任务,该接口对象通过工具类java.util.concurrent.Executors的静态方法来创建。
 
Executors此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。
 
ExecutorService提供了管理终止的方法,以及可为跟踪一个或多个异步任务执行状况而生成 Future 的方法。 可以关闭 ExecutorService,这将导致其停止接受新任务。关闭后,执行程序将最后终止,这时没有任务在执行,也没有任务在等待执行,并且无法提交新任务。
            executorService.execute(new TestRunnable());
 
1、创建ExecutorService
通过工具类java.util.concurrent.Executors的静态方法来创建。
Executors此包中所定义的 Executor、ExecutorService、ScheduledExecutorService、ThreadFactory 和 Callable 类的工厂和实用方法。
 
比如,创建一个ExecutorService的实例,ExecutorService实际上是一个线程池的管理工具:
        ExecutorService executorService = Executors.newCachedThreadPool();
        ExecutorService executorService = Executors.newFixedThreadPool(3);
        ExecutorService executorService = Executors.newSingleThreadExecutor();
 
2、将任务添加到线程去执行
当将一个任务添加到线程池中的时候,线程池会为每个任务创建一个线程,该线程会在之后的某个时刻自动执行。
 
三、关闭执行服务对象
        executorService.shutdown();

第三代码示例
本人写了一个例子
读取excel
下面是运行后的效果
```
"C:\Program Files\Java\jdk1.8.0_131\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=56801:C:\Program Files\JetBrains\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath C:\Users\wb_xg20\AppData\Local\Temp\classpath716596837.jar com.dahuatech.salescloud.performance.service.impl.PoolThread
14:48:18.015 [main] DEBUG com.alibaba.excel.metadata.property.ExcelHeadProperty - The initialization sheet/table 'ExcelHeadProperty' is complete , head kind is CLASS
14:48:18.092 [main] DEBUG com.alibaba.excel.context.AnalysisContextImpl - Initialization 'AnalysisContextImpl' complete
14:48:18.727 [main] DEBUG com.alibaba.excel.cache.selector.SimpleReadCacheSelector - Use map cache.size:17487
14:48:19.253 [main] DEBUG com.alibaba.excel.util.SheetUtils - The first is read by default.
14:48:19.254 [main] DEBUG com.alibaba.excel.metadata.property.ExcelHeadProperty - The initialization sheet/table 'ExcelHeadProperty' is complete , head kind is CLASS
14:48:19.254 [main] DEBUG com.alibaba.excel.context.AnalysisContextImpl - Began to read:ReadSheetHolder{sheetNo=0, sheetName='sheet1'} com.alibaba.excel.read.metadata.holder.xlsx.XlsxReadSheetHolder@2cd76f31
14:48:19.834 [main] INFO com.dahuatech.salescloud.core.utils.ExcelListenerUtil - read2254 rows %n
准备创建几个数组就是开启多少线程:3
*****已经加入集合1次
*****已经加入集合2次
*****已经加入集合3次
########################添加结束##################################
start handle time:1615445299853
0-***********pool-1-thread-1开始处理....
1-***********pool-1-thread-2开始处理....
2-***********pool-1-thread-3开始处理....
2-***********pool-1-thread-3处理完成254条数据
1-***********pool-1-thread-2处理完成1000条数据
0-***********pool-1-thread-1处理完成1000条数据
end handle time:1615445299958
total handle time:105ms
----------------------------------------------

Process finished with exit code 0

未完待续,请关注下面文章新大陆--多线程--进阶2 

ps:服了CDSN的新版功能,连着发就一直报服务器错误,发布不成功

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值