java多线程机制
2016-07-06 10:57
260 查看
多线程使用场景
1、同时需要做两件以上事情时需要开多个线程(例如:上传功能附带进度条显示,一边做上传,一边更新进度条状态。)
2、大量同类型数据需要进行处理(导入导出大量数据)
3、office文档转换pdf比较慢
4、一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
5、实时桌面聊天工具,开线程按时间间隔不断去访问聊天数据库记录,并反馈给用户。为了不阻塞界面主线程,单独的线程处理访问聊天数据库反馈给用户。
6、对庞大和复杂的数据进行拆分处理。 举个例子:一个程序需要需要一个2.0GHZ的CPU,占用10%的CPU使用1小时才能得出结果,最差方案就是用1小时。但有了线程使用多线程,在假设所有线程都可以并发执行的前提下我可以使用,10个线程让CPU利用率达到100%,这时我只要6分钟就可以有结果,虽然这些结果分散在10个不同的线程内,我可以再得到10个结果后对10个结果进行处理,得出最终结果,无论从时间维度还是CPU使用率维度,使用多线程是最优解
7、UI编程,一般UI界面绘制于主线程,为了不阻塞主线程让用户体验更流畅,需要创建单独的线程处理耗时操作,处理完了再更新主界面,典型的案例就是android应用开发
8、电视上面的一些抽奖画面,就是一边遍历手机号码,然后另一个线程把这些东西显示出来。
9、需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
总结:
多线程就是为了充分利用CPU的资源,提高程序执行效率,当发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。
多线程同时做多件事情
1、同时需要做两件以上事情时需要开多个线程(例如:上传功能附带进度条显示,一边做上传,一边更新进度条状态。)
2、大量同类型数据需要进行处理(导入导出大量数据)
3、office文档转换pdf比较慢
4、一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
5、实时桌面聊天工具,开线程按时间间隔不断去访问聊天数据库记录,并反馈给用户。为了不阻塞界面主线程,单独的线程处理访问聊天数据库反馈给用户。
6、对庞大和复杂的数据进行拆分处理。 举个例子:一个程序需要需要一个2.0GHZ的CPU,占用10%的CPU使用1小时才能得出结果,最差方案就是用1小时。但有了线程使用多线程,在假设所有线程都可以并发执行的前提下我可以使用,10个线程让CPU利用率达到100%,这时我只要6分钟就可以有结果,虽然这些结果分散在10个不同的线程内,我可以再得到10个结果后对10个结果进行处理,得出最终结果,无论从时间维度还是CPU使用率维度,使用多线程是最优解
7、UI编程,一般UI界面绘制于主线程,为了不阻塞主线程让用户体验更流畅,需要创建单独的线程处理耗时操作,处理完了再更新主界面,典型的案例就是android应用开发
8、电视上面的一些抽奖画面,就是一边遍历手机号码,然后另一个线程把这些东西显示出来。
9、需要知道一个任务的执行进度,比如我们常看到的进度条,实现方式可以是在任务中加入一个整型属性变量(这样不同方法可以共享),任务执行一定程度就给变量值加1,另外开一个线程按时间间隔不断去访问这个变量,并反馈给用户。
总结:
多线程就是为了充分利用CPU的资源,提高程序执行效率,当发现一个业务逻辑执行效率特别低,耗时特别长,就可以考虑使用多线程。
多线程同时做多件事情
相关文章推荐
- struts2基础——请求与响应、获取web资源
- 华为机试---完全数计算
- java中的异常
- 使用Spring整合Hibernate出现无法自动建立表的问题
- 三维装箱问题Java代码的简单实现过程
- 在WebService中使用Retrofit+RxJava
- org.springframework.beans.factory.BeanNotOfRequiredTypeException must be of type
- java协变类型返回
- SpringMVC参数传递方式
- 《Spring源码分析》——JDBC章节
- java 二叉树(三)递归遍历二叉树
- spring源码分析之<context:component-scan/>vs<annotation-config/>
- 一种c#深拷贝方式完胜java深拷贝(实现上的对比)
- springmvc mybatis集成
- Java持久层框架MyBatis简单实例
- Java 内部类种类及使用解析
- JavaEE第一天_html标签
- Eclipse使用技巧
- java封装
- 一种c#深拷贝方式完胜java深拷贝(实现上的对比分析)