
多线程
zhmystic
愿你走出半生,归来仍是少年。
展开
-
多线程-- 一.并发基础与并发模拟
高并发概念: High Concurrency:是互联网分布式系统架构设计中必须考虑的因素之一,通常是指通过设计保证系统能够同时并行处理很多请求. 并发:多个线程操作相同的资源,保证线程安全,合理使用资源高并发:服务能同时处理很多请求,提高程序性能 并发编程基础:一.cpu多级缓存 1.为什么需要CPU cache:因为CPU的频率太快了.快到主存...原创 2018-08-27 18:52:53 · 2434 阅读 · 0 评论 -
多线程-- 十.简单理解死锁
所谓死锁,指的是2个或2个以上进程在执行过程中因争夺资源,而造成互相等待的现象。如果没有外力作用,它们都将无法进行下去。死锁发生的必要条件:1.互斥条件 它是指进程对所分配到的资源进行排他性的使用。即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,请求者只能等待,直到资源占有者用完,释放了才可以。2.请求和保持条件 它是指进程已经保持了至少一个资源...原创 2018-08-28 10:50:57 · 194 阅读 · 0 评论 -
多线程-- 九.J.U.C之扩展组件
扩展组件: 1.Callable接口,Future接口,FutureTask类 它不是AQS的子类,不过它对线程结果的处理很好。 之前创建线程,有两种方式,一个是Thread,一个是Runnable接口。这两种方式有一个共同的缺点,就是在执行完任务之后,无法获取执行结果。从java1.5之后,就提供了Callable接口和Future接口,它可以在任务执行完毕之后得到结...原创 2018-08-27 19:12:41 · 208 阅读 · 0 评论 -
多线程-- 八.J.U.C之AQS
AQS 一.AQS的概念: lock包下有三个笼统的类: AbstractOwnableSynchronizer AbstractQueuedLongSynchronizer AbstractQueuedSynchronizer 通常的,AbstractQueuedSynchronizer的简称为AQS。一般我们叫A...原创 2018-08-27 19:10:59 · 264 阅读 · 0 评论 -
多线程-- 七.再次详解Hashmap和CounrrentHashmap
(转载的)前言Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据。本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 HashMap,没有它就不会有后面的 ConcurrentHashMap。HashMap众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 jdk1....转载 2018-08-27 19:09:25 · 2709 阅读 · 1 评论 -
多线程-- 六.并发容器 J.U.C
J.U.C 是JDK提供的一个包名的缩写,全名为:java.util.concurrent如图: 1.ArrayList --> CopyOnWriteArrayList 相比于ArrayList,它是线程安全的。 当有新元素添加到CopyOnWriteArrayList容器中时,它先从原有数组中拷贝一份出来,在新的数组中做写操作,写完...原创 2018-08-27 19:07:14 · 373 阅读 · 0 评论 -
多线程-- 五.线程问题常见的类 和其对应的同步、并发容器
线程不安全类 什么是线程不安全的类? 简单来说,如果一个类对象同时可以被多个线程访问,如果不做处理,容易表现出线程不安全现象。 1.StringBuilder和StringBuffer StringBuilder是线程不安全的 StringBuffer是线程安全的 因为StringBuffer的源码中,基本所有的方法上都加了synchr...原创 2018-08-27 19:04:51 · 204 阅读 · 1 评论 -
多线程-- 四.不可变对象和线程封闭带来的线程安全
不可变对象和线程封闭带来的线程安全 不可变对象 当一个类的对象满足下面条件时,这个对象可以成为不可变对象 通过在某些情况下,将不会修改的类对象设计为不可变对象,来让对象成为线程安全的.把对象编程不可变对象,就不会出现线程安全问题了1.对象创建以后,其状态就不能更改.2.对象所有域都是final类型.3.对象是正确创建的(在对象创建期间,this引用没有逸出)....原创 2018-08-27 19:01:58 · 668 阅读 · 0 评论 -
多线程-- 三.安全发布对象和单例模式举例
发布对象: 使一个对象能够被当前范围之外的代码所使用对象逸出: 一种错误的发布.当一个对象还没有构造完成时,就使它被其它线程所见. 安全发布对象4种方法:1.在静态初始化函数中初始化一个对象引用.2.将对象的引用保存到volatile类型域或者AtomicReference对象中.3.将对象的引用保存到某个正确构造对象的final类型域中.4.将对象的引用保...原创 2018-08-27 19:00:20 · 195 阅读 · 0 评论 -
多线程-- 二.线程安全性
线程安全/不安全线程安全性: 定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替进行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类时线程安全的. 线程安全性体现在三个方面: 1.原子性:互斥访问,同一个时刻只能有一个线程来对它进行操作, 如Atomic包,锁 2.可见性:一个线程...原创 2018-08-27 18:58:36 · 263 阅读 · 0 评论 -
多线程-- 十一.线程池
new Thread的弊端 ①.每次new Thread新建对象,性能差。 ②.线程缺乏同意管理,可能无限制的新建线程,相互竞争。有可能占用过多系统资源导致死机或OOM(程序申请内存过大)。 ③.缺少更多功能,如更多执行,定期执行 ,线程中断。线程池的好处 ①.重用存在的线程,减少对象的创建和消亡的开销,性能好。 ②.可有效控制最大并发线程数,...原创 2018-08-28 10:51:12 · 188 阅读 · 0 评论