JavaConcurrencyInPractice
忆之独秀
Engineer
展开
-
ThreadPoolExecutor + Callable + Future Example
Executor框架的优点之一就在于它可以执行并行任务,而这些并行任务执行完成之后会返回一个结果。Java并发API通过两个接口Callable和Future来获取,下面简要介绍。翻译 2017-09-05 22:59:39 · 2200 阅读 · 0 评论 -
如何优雅的关闭线程池
JUC中可以通过Executors框架来实现线程池,可以创建一个固定大小的线程池,如下所示:ExecutorService service = Executors.newFixedThreadPool(15);关闭线程池有两种方法:shutdown()和shutdownNow(),两种方法的区别何在?1.shutdown()当调用了shutdown()方法时,便进入关闭状态,此时意...原创 2018-07-08 13:57:25 · 6444 阅读 · 0 评论 -
Java多线程超时范围内等待完成的几种方法
在工程项目中可能会有这么一个场景,客户端处理层需要从服务端(CDN/图片服务器)获取n张图片(参考微博一个人最多有9张图片),那么问题来了,如何在一定的时间范围内尽可能多的获取到图片。当然,最为简单粗暴的方法就是通过串行的方式来获取,但是如果第一个请求hang住并超时,那么其他图片都无法获取,这显然不是一个好的设计方式。这个问题设计到两点,第一点是"尽可能多",相比于串行,解决方案...原创 2018-07-09 21:42:41 · 6630 阅读 · 2 评论 -
内置锁和重入锁
一、重入锁 Java提供了一中内置的锁机制来支持原子性:同步代码块(Synchronized Block)。同步代码块包括两部分:一个作为锁的对象引用(因为synchronized锁住的是对象),一个作为这个锁保护的代码块。以关键字synchronized来修饰的方法就是一种横跨整个方法体的同步代码块,其中该同步代码块的锁就是方法调用所在的对象。静态static的synchroni...原创 2019-06-29 23:29:48 · 673 阅读 · 0 评论 -
深入线程池ThreadPoolExecutor
我们先从阿里编程手册里面关于并发编程的两点来说明。6.3:线程资源必须通过线程池创建,不允许在应用中自行显示创建线程。说明:使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源的不足的问题。如果不使用线程池,有可能造成系统创建大量同类线程而导致消耗完内存或者"过度切换"的问题。6.4:线程池不允许使用Executors创建,而是通过ThreadPool...原创 2019-08-18 17:48:39 · 527 阅读 · 0 评论