加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

JAVA多线程限流解决并发问题

发布时间:2020-12-15 05:31:28 所属栏目:Java 来源:网络整理
导读:package concurrent; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit;
package concurrent; import java.text.SimpleDateFormat; import java.util.Date; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; /** * Auth: zhouhongliang * Date:2019/8/1 * 并发限流功能 * Semaphore */ public class SemaphoreDemo { public static void main(String[] args) { ExecutorService executorService = Executors.newCachedThreadPool(); Semaphore semaphore = new Semaphore(3); for (int i = 0; i < 10; i++) { executorService.execute(() -> { try { //semaphore.acquire();//一直等待 if (semaphore.tryAcquire(3,TimeUnit.SECONDS)) {//等待3秒 play(); semaphore.release(); } else { System.out.println(Thread.currentThread().getName() + " 进入超时"); } } catch (Exception e) { e.printStackTrace(); } finally { } }); } executorService.shutdown(); } /** * 模拟任务 */ public static void play() { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println(simpleDateFormat.format(new Date()) + " " + Thread.currentThread().getName() + " 进入"); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(simpleDateFormat.format(new Date()) + " " + Thread.currentThread().getName() + " 退出"); } }

输出结果:
2019-08-01 11:09:50 pool-1-thread-1 进入
2019-08-01 11:09:50 pool-1-thread-3 进入
2019-08-01 11:09:50 pool-1-thread-2 进入
2019-08-01 11:09:52 pool-1-thread-3 退出
2019-08-01 11:09:52 pool-1-thread-1 退出
2019-08-01 11:09:52 pool-1-thread-2 退出
2019-08-01 11:09:52 pool-1-thread-4 进入
2019-08-01 11:09:52 pool-1-thread-5 进入
2019-08-01 11:09:52 pool-1-thread-6 进入
pool-1-thread-7 进入超时
pool-1-thread-8 进入超时
pool-1-thread-9 进入超时
pool-1-thread-10 进入超时
2019-08-01 11:09:54 pool-1-thread-6 退出
2019-08-01 11:09:54 pool-1-thread-5 退出
2019-08-01 11:09:54 pool-1-thread-4 退出

Process finished with exit code 0

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读