设为首页 加入收藏

TOP

Android 自定义线程池的实战(二)
2017-10-13 10:47:23 】 浏览:1979
Tags:Android 定义 线程 池的 实战
bsp;  2.2、submit(Runnable)

        方法 submit(Runnable) 同样接收一个 Runnable 的实现作为参数,但是会返回一个 Future 对象。这个 Future 对象可以用于判断 Runnable 是否结束执行。如下是一个 ExecutorService 的 submit() 方法的例子:

package com.app;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ExecutorTest {
	public static void main(String[] args) {

		//创建一个线程数固定大小为10的线程池
		ExecutorService executorService = Executors.newFixedThreadPool( 10 ) ;

		//执行一个任务  该任务是 new Runnable() 对象
		Future future = executorService.submit( new Runnable() {
			@Override
			public void run() {
				Log.d( Thread.currentThread().getName() );	

			}
		});

		try {
			//如果任务结束执行则返回 null
			Log.d( ""+ future.get() );	
		} catch (Exception e) {
			e.printStackTrace();
		} 

		//关闭线程池
		executorService.shutdown();

	}
}

  结果:

pool-1-thread-1
null

   

     2.3 submit(Callable)

       方法 submit(Callable) 和方法 submit(Runnable) 比较类似,但是区别则在于它们接收不同的参数类型。Callable 的实例与 Runnable 的实例很类似,但是 Callable 的 call() 方法可以返回壹個结果。方法 Runnable.run() 则不能返回结果。

      Callable 的返回值可以从方法 submit(Callable) 返回的 Future 对象中获取。如下是一个 ExecutorService Callable 的例子:

package com.app;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class ExecutorTest {
	public static void main(String[] args) {

		//创建一个线程数固定大小为10的线程池
		ExecutorService executorService = Executors.newFixedThreadPool( 10 ) ;

		//执行一个任务  该任务是 new Callable() 对象
		Future future  = executorService.submit( new Callable<String>() {

			@Override
			public String call() throws Exception {
				return "执行完了" ;
			}
		}) ;
	
		try {
			//如果任务结束执行则返回 
			Log.d( "结果是: "+ future.get() );	
		} catch (Exception e) {
			e.printStackTrace();
		} 

		//关闭线程池
		executorService.shutdown();

	}
}

  结果:

结果是: 执行完了

 

   2.4、inVokeAny()

       方法 invokeAny() 接收一个包含 Callable 对象的集合作为参数。调用该方法不会返回 Future 对象,而是返回集合中某一个 Callable 对象的结果,而且无法保证调用之后返回的结果是哪一个 Callable,只知道它是这些 Callable 中一个执行结束的 Callable 对象。如果一个任务运行完毕或者抛出异常,方法会取消其它的 Callable 的执行。

package com.app;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class ExecutorTest {
	public static void main(String[] args) {

		//创建一个线程数固定大小为10的线程池
		ExecutorService executorService = Executors.newFixedThreadPool( 10 ) ;


		List<Callable<String>> list = new ArrayList<>() ;
		
		//创建第一个 Callable
		Callable<String> callable1 = new Callable<String>() {

			@Override
			public String call() throws Exception {
				Log.d( "callable 1 线程是: "+ Thread.currentThread().getName()  );	
				return "执行完了 callable 1" ;
			}
		};
		
		//创建第二个 Callable
		Callable<String> callable2 = new Callable<String>() {

			@Override
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Android Handler机制(三)----Loop.. 下一篇【腾讯Bugly干货分享】Android进..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目