标签:skiplist object类 发包 join 死锁 操作 tle cto 无锁
摩尔定律的失效,2004年秋季,Intel宣布彻底取消4GHz计划,CPU向多核心的发展,顶级计算机科学家唐纳德丶尔文丶克努斯评价:在我看来,这种现象(并发)或多或少是由于硬件设计者已经无计可施导致的,他们将摩尔定律失效的责任推脱给软件开发者。
同步和异步:
并发与并行:都表示多个任务同时执行,但并发偏重于多个任务交替执行。
临界区:即共享的数据
阻塞和非阻塞:
死锁、饥饿和活锁:死锁为互不让行,饥饿为一直拿不到资源,活锁为一直撞到
由于临界区的存在,多线程之间的并发必须得到控制。根据控制的并发策略,分为阻塞、无饥饿,无障碍,无锁,无等待 5种
JMM中的关键技术点都是围绕着多线程的原子性、可见性和有序性来建立的
(1)、原子性:操作不可中断
(2)、可见性:当一个线程修改了某个共享变量的值时,其他线程是否立即知道这个修改。
(3)、有序性:程序执行时,可能会进行指令的重排来达到优化效果,但在多线程中,由于线程的相互影响,重新排序的线程会打乱其他的线程的执行结果。
进程是计算机中的程序关于某数据集合上的一次运动活动,是系统进行资源分配的基本单位。进程是程序的基本执行实体,进程是线程的容器。
Thead类方法:start() 开启线程,run()线程执行实体,sleep() 睡眠线程不会释放资源,yield() 让出CPU,join() 等待线程运行结束,suspend() 挂起,resume() 重启
Object类方法:wait() 释放对象监听器,线程进入阻塞状态;notify() 随机唤醒一个,notifyAll() 唤醒所有。wait,notify,notifyAll 要在Synchronize同步块中出现,因为其也会出现并发问题
volatile关键字告诉虚拟机要主要不要随意变动优化目标指令,对JMM中有序性。但通过volatile是无法保证原子性操作的。
ConcurrentHashMap:高效并发HashMap,线程安全
CopyOnWriteArrayList:在读多写少的场合,这个List性能非常好,远远浩宇Vector,都是线程安全
ConcurrentLinkedQueue:高效并发队列,使用链表实现线程安全
BlockingQueue:一个JDK内部通过链表、数组等实现的阻塞 接口
ConcurrentSkipListMap:跳表的实现,这是一个Map,使用跳表的数据结构进行快速查找
此接口是一个线程安全
的 存取实例
的队列。使用场景
BlockingQueue通常用于一个线程生产对象,而另外一个线程消费这些对象的场景。
HashMap 线程不安全,HashTable,ConcurrentHashMap线程安全
ConcurrentHashMap 采用锁分段技术比HashTable更加高效
。。。。
标签:skiplist object类 发包 join 死锁 操作 tle cto 无锁
原文地址:https://www.cnblogs.com/yanyouqiang/p/9429688.html