文档章节

简单实用Java多线程

李岩飞
 李岩飞
发布于 2016/11/08 15:26
字数 632
阅读 64
收藏 1

平时的工作主要是对数据文件的处理,每小时要处理的文件都是几千个文件。如果是单线程处理这些文件肯定是行不通的。所以就考虑到多线程并发处理的文件情况。对于线程的处理,用的最多的就是Runnable和Callable。Runnable是可以用到Thread里面的,而Callable不行。但是这两个都支持线程池。对于多线程处理,更多的还是借助线程池操作的。

下面我们在代码中了解下这两个线程的区别。

首先是创建了一个同时运行3个线程的Runnable线程池。创建10个线程后,下面的“主线程执行结束....”这句话不会等到所有线程结束之后在运行,而是进入线程池后立即运行。如果你要处理的线程是一种创建后就继续执行主线程下面的程序,可以使用这种Runnable,继承该接口需要实现run方法。

ThreadRunnablePool<RunnableClass> pool = new ThreadRunnablePool<RunnableClass>(3);
		for (int i = 0; i < 10; i++) {
			pool.execute(new RunnableClass(i));
		}
		System.out.println("主线程执行结束....");

运行结果:

线程:0
主线程执行结束....
线程:1
线程:2
线程:4
线程:3
线程:6
线程:5
线程:8
线程:7
线程:9

当然了如果你的需求是需要线程池里的所有子线程执行完后,再继续执行主线程的工作,甚至需要各个子线程里面返回的结果,可以考虑使用Callable,继续该类需要实现call方法,并需要返回一个结果对象。测试代码如下。

ThreadCallablePool<CallableClass> pool = new ThreadCallablePool<CallableClass>(3);
		for (int i = 0; i < 10; i++) {
			pool.addCallable(new CallableClass(i));
		}
		System.out.println("主线程执行中....");
		List<Future<Object>> list = pool.executeRS();
		for (Future<Object> rs : list) {
			try {
				System.out.println(rs.get());
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		System.out.println("主线程执行结束....");

运行结果:

主线程执行中....
线程:0
线程:1
线程:2
线程:4
线程:3
线程:6
线程:5
线程:7
线程:8
线程:9
线程=====0
线程=====1
线程=====2
线程=====3
线程=====4
线程=====5
线程=====6
线程=====7
线程=====8
线程=====9
主线程执行结束....

线程里面会有很多更详细介绍,我就不在这里说了,因为有很多类似的博客介绍。上面提到的只是工作中用到的一些方式。只希望对有需要的朋友有些帮助。

相关类以及源码地址:https://git.oschina.net/eliyanfei/api_tools.git

© 著作权归作者所有

李岩飞
粉丝 63
博文 5
码字总数 4086
作品 1
北京
后端工程师
私信 提问
《Kotin 极简教程》第15章 Kotlin 文件IO操作、正则表达式与多线程

第15章 Kotlin 文件IO操作与多线程 《Kotlin极简教程》正式上架: 点击这里 > 去京东商城购买阅读 点击这里 > 去天猫商城购买阅读 非常感谢您亲爱的读者,大家请多支持!!!有任何问题,欢迎...

程序员诗人
2017/07/24
0
0
Clojure 语言的设计

via:AVOS Cloud Blog 基于 JVM 的决定 Clojure 能够吸引人的很重要一点是它是 JVM 之上的语言,这个决定非常关键。 首先,因为根植于 JVM 之上,并且做到了跟 Java 语言的相互调用,它能吸引...

都比zunxi
2014/08/21
593
0
零基础学Java10系列三:Java高级编程​​​​​​​

更多关于Java高级编程内容链接:零基础学Java10系列三:Java高级编程——阿里云大学 多线程: 生产者和消费者指的是两个不同的线程类对象,两个进程公用一个公共的固定大小缓冲区。其中之一的...

阿里云大学云百科
04/26
35
0
第9章 文件IO操作、正则表达式与多线程

第9章 文件IO操作、正则表达式与多线程 我们在《第6章 扩展函数与属性》中已经介绍过Kotlin中的类扩展的特性。使用Kotlin的扩展函数功能,我们可以直接为 String 类实现一个 inc() 函数,这个...

程序员诗人
2017/10/18
0
0
15个顶级Java多线程面试题及回答

Java 线程面试问题 在任何Java面试当中多线程和并发方面的问题都是必不可少的一部分。如果你想获得任何股票投资银行的前台资讯职位,那么你应该准备很多关于多线程的问题。在投资银行业务中多...

LCZ777
2014/05/27
645
0

没有更多内容

加载失败,请刷新页面

加载更多

java通过ServerSocket与Socket实现通信

首先说一下ServerSocket与Socket. 1.ServerSocket ServerSocket是用来监听客户端Socket连接的类,如果没有连接会一直处于等待状态. ServetSocket有三个构造方法: (1) ServerSocket(int port);...

Blueeeeeee
22分钟前
2
0
用 Sphinx 搭建博客时,如何自定义插件?

之前有不少同学看过我的个人博客(http://python-online.cn),也根据我写的教程完成了自己个人站点的搭建。 点此:使用 Python 30分钟 教你快速搭建一个博客 为防有的同学不清楚 Sphinx ,这...

王炳明
昨天
4
0
黑客之道-40本书籍助你快速入门黑客技术免费下载

场景 黑客是一个中文词语,皆源自英文hacker,随着灰鸽子的出现,灰鸽子成为了很多假借黑客名义控制他人电脑的黑客技术,于是出现了“骇客”与"黑客"分家。2012年电影频道节目中心出品的电影...

badaoliumang
昨天
13
0
很遗憾,没有一篇文章能讲清楚线程的生命周期!

(手机横屏看源码更方便) 注:java源码分析部分如无特殊说明均基于 java8 版本。 简介 大家都知道线程是有生命周期,但是彤哥可以认真负责地告诉你网上几乎没有一篇文章讲得是完全正确的。 ...

彤哥读源码
昨天
13
0
jquery--DOM操作基础

本文转载于:专业的前端网站➭jquery--DOM操作基础 元素的访问 元素属性操作 获取:attr(name);$("#my").attr("src"); 设置:attr(name,value);$("#myImg").attr("src","images/1.jpg"); ......

前端老手
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部