zoukankan      html  css  js  c++  java
  • 多线程学习(二)

    如果希望在任务完成时返回一个值,那么可以实现callable接口

    public class TaskWithResult implements Callable<String> {
    	private int id;
    
    	public TaskWithResult(int id) {
    		super();
    		this.id = id;
    	}
    
    	@Override
    	public String call() throws Exception {
    		// TODO Auto-generated method stub
    		return "result of taskWithResult " + id;
    	}
    
    	public static void main(String[] args) {
    		ArrayList<Future<String>> results = new ArrayList<>();
    		// 运行方式一
    		// 不使用Executor运行Future
    		// for (int i = 0; i < 10; i++) {
    		// FutureTask<String> futureTask = new FutureTask<>(new
    		// TaskWithResult(i));
    		// new Thread(futureTask).start();
    		// results.add(futureTask);
    		// }
    
    		// 运行方式二  使用Executor.submit来提交callable任务 
    		ExecutorService service = Executors.newCachedThreadPool();
    		for (int i = 0; i < 10; i++) {
    			results.add(service.submit(new TaskWithResult(i)));
    		}
    
    		for (Future<String> f : results) {
    			try {
    				System.out.println(f.get());
    			} catch (InterruptedException | ExecutionException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} finally {
    				service.shutdown();
    			}
    		}
    	}
    }
    

    callable的运行会产生Future对象,可以使用isDone()方法来查询Future是否完成。当任务完成时,它具有一个结果,可以调用get()方法来获取这个结果。也可以不使用isDone()直接调用get(),这种情况下get()将阻塞。直至结果准备就绪。

  • 相关阅读:
    Oracle 10g 改机器名后监听不能启动 解决方案 TNS12541 TNS12545
    14.3.1 IMPDP 命令行选项
    14.3.2 调用IMPDP —— 导入表空间
    三十岁之前不必在乎的事
    正则表达式
    GridLayout and GridData
    非UI线程更新界面
    整理用Java实现数字转化成字符串左边自动补零方法
    stackLayout
    读写properties文件
  • 原文地址:https://www.cnblogs.com/joeCqupt/p/6814112.html
Copyright © 2011-2022 走看看