ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ExecutorService

2022-09-15 14:04:49  阅读:296  来源: 互联网

标签:completionService System Date new sendTest ExecutorService SendTest


package com.demo.test;

import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.Date;
import java.util.concurrent.*;

@SpringBootTest
public class CompletionServiceTest {
	@Test
	public void test() throws ExecutionException, InterruptedException {
		//future.get() 阻塞 date相同
//        ExecutorService executorService = Executors.newFixedThreadPool(10);
//        for (int i = 0; i < 5; i++) {
//            Future future = executorService.submit(new CallableTest(new SendTest()));
//            Future future2 = executorService.submit(new CallableTest2(new SendTest()));
//            System.out.println(""+future.get()+new Date());
//            System.out.println(""+future2.get()+new Date());
//        }
		//使用CompletionService不会阻塞
		ExecutorService executorService = Executors.newFixedThreadPool(10);
		CompletionService completionService = new ExecutorCompletionService(executorService);
		for (int i = 0; i < 5; i++) {
			completionService.submit(new CallableTest(new SendTest()));
			completionService.submit(new CallableTest2(new SendTest()));
			//completionService.take()也是阻塞,如果只有两个任务,第三个take阻塞,poll不会阻塞
			System.out.println("" + completionService.take().get() + new Date());
			System.out.println("" + completionService.take().get() + new Date());
//            System.out.println("" + completionService.take().get() + new Date());
		}

	}
}

class CallableTest implements Callable {
	SendTest sendTest;

	CallableTest(SendTest sendTest) {
		this.sendTest = sendTest;
	}

	@Override
	public Object call() throws Exception {
		Thread.sleep(5000);
		sendTest.send();
		return "11111" + ":" + Thread.currentThread();
	}
}

class CallableTest2 implements Callable {
	SendTest sendTest;

	CallableTest2(SendTest sendTest) {
		this.sendTest = sendTest;
	}

	@Override
	public Object call() throws Exception {
		Thread.sleep(2000);
		sendTest.send();
		return "22222" + ":" + Thread.currentThread();
	}
}

class SendTest {
	public void send() {
//        System.out.println("send"+new Date()+":"+Thread.currentThread());
	}
}

标签:completionService,System,Date,new,sendTest,ExecutorService,SendTest
来源: https://www.cnblogs.com/ococo/p/16696290.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有