java并发包&并发队列

1.什么是线程安全问题?
保证在多个线程之间共享同一个全局变量或者静态变量,保证数据的一致
性,和原子性。
2.线程同步有哪些方式?
synchronized,lock
3.线程同步提高了效率?
降低程序效率,阻塞,抢锁资源,效率不高。
Java并发包
原子类,Lock,并发包。
并发类。
4.你们接触过哪些线程安全的类?
Vector与Array List区别?
实现原理都是通过数组实现-查询速度块,增加,修改,删除速度慢。
区别:线程安全问题?
Vector是安全的(上锁的集合),ArrayList是线程不安全的。
ArrayList效率高。
HashTable与HashMap区别?
HashTable线程是安全的。
HashMap是线程不安全的。
链表+数组 put hashcode取模得到下表位置 一致性取模算法。
证明线程安全
查看源码put方法。
Hashtable的get方法是线程安全?
读--不需要?
源码加了。在同一时刻,只能让一个线程去读。
Collections.synchronized*(m)
将线程不安全的集合转换成线程安全的集合。
怎么对Java集合排序?
Collections,sort();

jdk1.5之后 产生好多Java并发包
Hashtable线程安全的,效率非常低,锁的资源竞争。
多线程共享同一个HashTable  加锁,影响效率
每次只能有一个线程去操作hashtable。
发明一种新的并发包。
ConcurrentHashMap
分段锁--怎么分段。16段
将一个整体拆分成多个小的hashTable()
默认分为16段。也就是最高支持16个线程的并发修改操作。
并且代码中大多共享变量使用volatile关键字声明,目的是
第一时间获取修改的内容,性能非常好。
多个线程没有用同一把锁。
分段锁计算。
只要保证线程安全问题,需要用ConcurrentHashMap:效率高。

CountDownLatch:实现类似计数器的功能。
jdk1.5的并发包。

CyclicBarrier:
计数用的,当线程达到一定数量时,并行执行。
Semaphore:计数的信号量

并发队列:
队列:多个线程共享数据
在并发队列 有界和无界
区别在于一个支持有限制,一个无限制。
阻塞队列和非阻塞队列区别?
生产者写入满的时候,就会进入到阻塞。
当队列为空的时候,消费者也会等待。
ConcurrentLinkedDeque:适用高并发场景下的队列。
性能好于BlookingQueue
基于链接节点的无界线程安全队列。该队列的元素遵循先进先出的原则
该队列不允许null元素。
BlockingQueue
阻塞队列,有界
常用于生产者消费者场景,阻塞队列就是生产者存放元素的容器
而消费者也是从容器中拿元素。
阻塞队列是线程安全的。










猜你喜欢

转载自blog.csdn.net/qq_38357267/article/details/80972942