Code Bye

线程打断返回值问题

线程池,执行之后,某个方法执行超时。
该方法返回一个默认值。
但是打断之后,无法获取返回值。
看代码

public static void main(String[] args) throws IOException {

		int poolSize = 10;
		ExecutorService executorService = new ScheduledThreadPoolExecutor(poolSize);
		List list = new ArrayList();
		list.add(new Callable() {
			public Object call() throws Exception {
				String result = "faliure";
				try {
					result = test(result);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
					return result;
				}
				return result;
			}
		});
		Collection tasks = Collections.synchronizedCollection(list);
		try {
			List results = executorService.invokeAll(tasks, 3, TimeUnit.SECONDS);
			Future result;
			for (int i = 0; i < results.size(); i++) {
				result = (Future) results.get(i);
				System.out.println("result : " + result.isDone());
				System.out.println("result : " + result.get());
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			executorService.shutdown();
		}

	}

public static String test(String param) {
		String result = "huahua";
		try {
			Thread.sleep(10000);
		} catch (Exception e) {
			e.printStackTrace();
			return result;
		}
		return result;
	}

20分
Collection tasks = Collections.synchronizedCollection(list);
虽然装饰模式增加了线程同步,但tasks被迭代使用时,需要手动添加线程同步才行.
不知道是不是因为这个原因.

20分
线程都未跑完你就返回值啊,应该拿不到的呀。
解决了。不过感谢各位回答。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明线程打断返回值问题