
java并发
马之上
这个作者很懒,什么都没留下…
展开
-
谈谈ConcurrentHashMap与HashMap
HashMap与1.7相比的重大变化: 数据结构:取消了segment,直接用table保存数据,锁的粒度更小,减少并发冲突的概率。 时间复杂度:Table+链表和红黑树的形式,纯链表的形式时间复杂度O(n),红黑树的形式时间复杂度O(logn),性能提升大。链表转红黑树,必要条件:个数超过了8个。当链表个数小于等于6的时候,从红黑树转化为链表。 线程并发安全机制:从1.7的ReentrantLock+segment+HashEntry到CAS+synchronize+HashEntry+红黑树 锁的粒度原创 2020-07-13 13:13:24 · 278 阅读 · 0 评论 -
java并发(五)java中的各种锁详细介绍
Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。 Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录: 1. 乐观锁 VS 悲...转载 2020-04-07 11:57:40 · 159 阅读 · 0 评论 -
java并发(四)终止线程的三种方式
java并发(四)终止线程的四种方式 线程属于一次性消耗品,在执行完run()方法之后线程便会正常结束了,线程结束后便会销毁,不能再次start,只能重新建立新的线程对象,但有时run()方法是永远不会结束的。 例如在程序中使用线程进行Socket监听请求,或是其他的需要循环处理的任务。在这种情况下,一般是将这些任务放在一个循环中,如while循环。当需要结束线程时,如何退出线程呢? 有三种方...转载 2020-04-05 11:11:35 · 425 阅读 · 0 评论 -
java并发(三)之线程的生命周期(状态)
java并发(三)之线程的生命周期(状态) 线程在启动后不是一开始就处于执行状态,也不会一直处于一个状态,线程拥有一个自己的生命周期,分为五种状态,它要经过 新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)5 种状态。 新建状态(New) 当创建一个线程之后,JVM为其分配内存,并初始化它的成员变量的值,当还没有调用start()方...原创 2020-04-04 10:53:52 · 102 阅读 · 0 评论 -
java并发(一)之四种创建线程的方法
java并发(一)之四种创建线程的方法 一、继承Thread 1.继承Thread,然后重写它的run()方法。 2.线程唯一的启动方法就是通过Thread的start()方法。**start()是一个native方法,**使用它将执行run()方法。 示例: public class Thread1 extends Thread{ @Override public void run() {...原创 2020-04-04 09:37:10 · 131 阅读 · 0 评论 -
java并发(二)之五种线程池的用法和特征
五种线程池的使用: 线程池的好处: a. 重用存在的线程,减少对象创建、消亡的开销,性能佳。 b. 可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞。 c. 提供定时执行、定期执行、单线程、并发数控制等功能。 newFixedThreadPool: 创建固定线程数量的,适用于负载均衡的服务器,使用了无界队列 特点: 线程池中的线程处于一定的量,可以很好的控制线程的...原创 2020-04-02 12:41:48 · 184 阅读 · 0 评论