![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java,多线程
归海一刀之渔舟唱晚
这个作者很懒,什么都没留下…
展开
-
如果线程池中线程任务已经执行完毕了,当前线程的状态是怎样的?
1.代码样例int corePoolSize = 2; int maximumPoolSize = 4; long keepAliveTime = 20; TimeUnit unit = TimeUnit.SECONDS; ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, ma...原创 2020-02-03 10:15:19 · 7280 阅读 · 1 评论 -
httpclient大量请求网络拒绝 Connection pool shut down
1.背景描述项目中每次400条数据递归网络请求第三方数据,该次递归总的数据量有220000左右,可以算出大概需要550次调用。但是数据跑到13W左右,程序中断。2.案例分析①.系统跑了一遍,没有看到任何日志。分析: 因为是多线程应用,一开始以为是线程池写法有误,导致数据库连接用完,解决:使用自定义连接池上了一版,并且加上了日志。②.系统再跑了一遍,发现日志报错...原创 2019-05-30 10:38:57 · 8662 阅读 · 2 评论 -
高并发下ArrayList空值(null)问题
对于ArrayList,有一篇blog专门的介绍,它不适用于多线程环境中,废话不多说,直接上代码让大家看个明白!public class ArrayListTest { @Test public void test() { List<Person> personList = new ArrayList<>(); for (in...原创 2018-06-20 12:30:49 · 8843 阅读 · 4 评论 -
如何理解阻塞,非阻塞,同步,异步
一.问题引出之前和朋友讨论多线程问题的时候,朋友问了一下阻塞和同步的区别,当时顿时懵逼了。这两个概念给人最直接的感受就是:阻塞也是等,同步也是等呀!好像没什么区别吧。二.概念阻塞和非阻塞都是通常用来形容多线程间的相互影响。比如一个线程占用了临界资源,那么其他所有需要这个临界资源的线程都要在临界区等待,等待或造成线程的挂起,这种情况就是阻塞。它会一直尝试做,直到完成。平常用到的锁基本上就是阻塞的。非...原创 2018-06-26 20:40:34 · 348 阅读 · 1 评论 -
ReentrantLock之公平锁,可重入的理解
一.问题ReentrantLock是jdk5里面的一个方法类,主要讨论两个问题:1.ReentrantLock的可重入体现2.ReentrantLock的公平锁和非公平锁体现二.讲解2.1ReentrantLock的可重入体现...原创 2018-06-26 19:44:58 · 1349 阅读 · 2 评论 -
future的简单实现
一 .入门相信大家使用过线程,对future应该不会陌生吧! 在java一种最简单的使用是Callable,比如:public class A implements Callable<String> { @Override public String call() throws Exception { return "aaa"; }}@org....原创 2018-06-21 14:54:42 · 1098 阅读 · 1 评论 -
调用线程的yield()方法会不会只让优先级相同的执行?
在一些blog上面,对于线程的yield(),他们对调用这个方法的的描述为,只会将运行权让给相同优先级或更高的优先级执行。这样就很容易使读者以为,如果有两个线程a和b,a的优先级大于b的优先级,即使a调用了yeild()方法,由于b的优先权低于a,那么线程需要等a运行完之后b才有机会运行,是这样的?public class YieldTest extends Thread { ...原创 2018-04-26 00:10:36 · 5132 阅读 · 6 评论 -
记一次生产问题--CompletableFuture默认线程池
在jdk7中,我们使用线程池可能会使用ExecutorService,默认有四种方式Executors.newSingleeThreadPool()Executors.newFixedThreadPool()Executors.newCacheThreadPool()Executors.newScheduledThreadPool()在jdk8中,CompletableF...原创 2018-04-20 02:18:53 · 28401 阅读 · 19 评论 -
Java中的锁原理、锁优化、CAS、AQS
一、为什么要用锁?锁-是为了解决并发操作引起的脏读、数据不一致的问题。二、锁实现的基本原理2.1、volatileJava编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新,线程应该确保通过排他锁单独获得这个变量。Java语言提供了volatile,在某些情况下比锁要更加方便。volatile在多处理器开发中保证了共享变量的“ 可见性”。可见性的意思是当一个线程修改一个共享变量时...转载 2018-04-08 13:28:07 · 283 阅读 · 0 评论 -
浅谈ConcurrentHashMap
ConcurrentHashMap是Java5中新增加的一个线程安全的Map集合,可以用来替代HashTable。对于ConcurrentHashMap是如何提高其效率的,可能大多人只是知道它使用了多个锁代替HashTable中的单个锁,也就是锁分离技术(Lock Stripping)。实际上,ConcurrentHashMap对提高并发方面的优化,还有一些其它的技巧在里面(比如你是否知道在get...转载 2018-03-14 00:25:05 · 2941 阅读 · 0 评论