![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JUC
文章平均质量分 61
一个头一个大
这个作者很懒,什么都没留下…
展开
-
JAVA线程池
系统启动一个新线程的成本是比较高的,因为它涉及与操作系统交互。在这种情形下,使用线程池可以很好地提高性能,尤其是当程序中需要创建大量生存期很短暂的线程时,更应该考虑使用线程池。与数据库连接池类似的是,线程池在系统启动时即创建大量空闲的线程,程序将一个Runnable对象或Callable对象传给线程池,线程池就会启动一个空闲的线程来执行它们的run()或call()方法,当run()或call()方法执行结束后,该线程并不会死亡,而是再次返回线程池中成为空闲状态,等待执行下一个Runnable对象的run(原创 2022-07-06 21:00:24 · 203 阅读 · 0 评论 -
Java多线程之间的通信方式
在Java中线程通信主要有以下三种方式:如果线程之间采用synchronized来保证线程安全,则可以利用wait()、notify()、notifyAll()来实现线程通信。这三个方法都不是Thread类中所声明的方法,而是Object类中声明的方法。原因是每个对象都拥有锁,所以让当前线程等待某个对象的锁,当然应该通过这个对象来操作。并且因为当前线程可能会等待多个线程的锁,如果通过线程来操作,就非常复杂了。另外,这三个方法都是本地方法,并且被final修饰,无法被重写。wait()方法可以让当前线程释放对原创 2022-07-06 15:44:55 · 3235 阅读 · 0 评论 -
Thread类的常用方法
Thread()Thread(String name)Thread(Runnable target)Thread(Runnable target, String name)其中,参数 name为线程名,参数 target为包含线程体的目标对象。currentThread():返回当前正在执行的线程;interrupted():返回当前执行的线程是否已经被中断;sleep(long millis):使当前执行的线程睡眠多少毫秒数;yield():使当前执行的线程自愿暂时放弃对处理器的使用权并允许其他线程执行;原创 2022-07-06 15:20:03 · 1049 阅读 · 0 评论 -
CopyOnWriteArrayList原理
CopyOnWriteArrayList的原理参考答案CopyOnWriteArrayList是Java并发包里提供的并发类,简单来说它就是一个线程安全且读操作无锁的ArrayList。正如其名字一样,在写操作时会复制一份新的List,在新的List上完成写操作,然后再将原引用指向新的List。这样就保证了写操作的线程安全。CopyOnWriteArrayList允许线程并发访问读操作,这个时候是没有加锁限制的,性能较高。而写操作的时候,则首先将容器复制一份,然后在新的副本上执行写操作,这个时候写操作是上原创 2022-07-06 10:37:41 · 125 阅读 · 0 评论 -
jdk8中ConcurrentHashMap的特点
jdk8中ConcurrentHashMap的特点原创 2022-07-06 10:08:42 · 129 阅读 · 0 评论 -
JAVA集合问题(2)
HashMap底层是一个数组,数组中元素是链表或者红黑树。hashMap补充:注意,自己写的hashmap的key会被覆盖(两个key的hashcode相等,且equals),而java里面的不会;value都会被覆盖jdk8实现懒惰初始化,用到的时候才创建,此时threshold会变为其容量大小,数组在用到的时候才会创建hashmap初始化容量都会转为2的次幂; 没定义容量则初始容量为16map允许key和value为nullhashMap里面得node和treenode都直接继承或间接继承了Ent原创 2022-06-24 16:38:35 · 122 阅读 · 0 评论 -
jdk7 和jdk8中的hashmap变化:
7中是Entry数组,8中是Node数组7中数组中放的是链表,8中放的是红黑树或链表、7扩容时是正序遍历原来的链表,将节点依次放在链表头,而8是正序遍历原来的链表,将节点放在链表尾;在并发的情况下,7可能出现并发死链的情况。7扩容时在size > threshold的前提下,还要判断null!=table[bucketIndex],即判断要放的那个桶是不是为空,如果都满足,才扩容;而8只要满足size > threshold就扩容。7在插入新节点时,是插在链表头的;8是插在链表尾的,还要判断是不是数量大于8原创 2022-06-24 16:41:10 · 289 阅读 · 0 评论 -
volatile 关键字
大家都应该知道 volatile 的主要作用有两点: - 保证变量的内存可见性 - 禁止指令重排序那么,什么是内存可见性,什么是指令重排序,以及它们涉及了那些机制呢?下面就让我们来看看吧。 我们知道声明了volatile关键字的变量可以在多线程处理环境下,确保内存的可见性。计算机硬件层会保证对被volatile关键字修饰的共享变量进行写操作后的内存可见性,而这种内存可见性是由Lock前缀指令以及缓存一致性协议(MESI控制协议)共同保证的。在现代计算机中,CPU 的速度是极高的,如果 CPU原创 2022-06-30 08:19:40 · 91 阅读 · 0 评论 -
JUC相关问题(1)
线程安全集合类可以分为三大类:遗留的线程安全集合如 Hashtable , Vector使用 Collections 装饰的线程安全集合,如:Collections.synchronizedCollectionCollections.synchronizedListCollections.synchronizedMapCollections.synchronizedSetCollections.synchronizedNavigableMapCollections.synchronizedNavigable原创 2022-06-24 16:28:22 · 119 阅读 · 0 评论 -
java多线程交替输出
实现Java多线程交替输出 要求:线程 1 输出 a 5 次,线程 2 输出 b 5 次,线程 3 输出 c 5 次。现在要求输出 abcabcabcabcabc 该实现没有考虑a, b, c线程都就绪再开始.原创 2022-06-10 21:58:00 · 589 阅读 · 0 评论