
多线程
文章平均质量分 67
桃子orz
这个作者很懒,什么都没留下…
展开
-
原子性 可见性 有序性
简介 并发安全的三个要素, 原子性/可见性/有序性。 原子性 即一个操作或者多个操作,要么全部执行,并且执行的过程不会被任何因素打断,要么就都不执行。 现实问题 银行转账:A给B转1000元, 那么存在两个操作:从A账户减去1000元,在B账户加上1000元。如果第一个操作完成之后终止了, 那么就会导致B账户金额没有增加。 所以要保证两个操作要么都执行, 要么都不执行。 程序问题 假设赋值过程不具备原子性,变量赋值包括两个过程:为低16位赋值,为高16位赋值 i = 9; 如果低16位赋完值,突然被中断,原创 2021-04-26 10:37:27 · 155 阅读 · 0 评论 -
生产者消费者
简介 生产者消费者是线程并发的经典案例, 保证线程安全且更好的协作。 线程安全是避免多线程操作同一个数据造成的脏读, 更好的协作是多个线程的状态切换可控且有目的性。 类比现实中的问题有点像交通警指挥交通。 单生产单消费 生产者 public class Product { private String lock; public Product(String lock) { super(); this.lock = lock; } public原创 2021-04-25 10:44:11 · 131 阅读 · 0 评论 -
Synchronized & Reentrantlock
Synchronized 方法同步: synchronized修饰的方法在method_info结构有ACC_synchronized标记,线程执行到这个方法时会识别标记,获取对应的锁,实现方法同步。 public void synchronized method(){} //对象为this示例 public static void synchronized method(){} //对象为this的class示例 代码块同步: 通过编译将monitorenter指令插入到同步代码块的开始处,将原创 2021-04-21 10:32:47 · 85 阅读 · 0 评论 -
Thread 状态&方法
线程状态 源码中可以看到关于线程的状态有一下几种: public enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; } 状态图示 下图展示线程执行过程中状态的切换 常见方法 1.sleep:释放cpu, 不释放锁, Thread类的方法,必须带一个时间参数。 2.yield:让出CPU调度,重新回到可执行状态, 参与锁的竞争,Thread类的方法。 3.wait原创 2021-04-20 17:24:12 · 158 阅读 · 0 评论 -
死锁
简介 两个及以上的线程, 因资源争夺无法继续执行。 四个必要条件 互斥: 在相同时间下, 资源只能被一个进程所持有。 不剥夺: 资源只能被线程主动释放, 不可被抢夺。 请求和保持: 线程请求已被其他线程持有的资源, 无法获取,进入等待模式,且自身持有资源不释放。 循环等待: 存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个进程所请求。 原因 资源争夺 不可剥夺的资源,不足以满足多线程需要, 使得线程间相互争夺而陷入僵局。 推进顺序非法 进程在运行过程中,释放和请求资源的顺原创 2021-04-19 14:47:01 · 121 阅读 · 0 评论 -
线程池ThreadPool
介绍 线程池就是对于Thread的复用,避免创建大量的工作线程导致资源的开销及浪费,甚至引发oom发生。 ThreadPoolExecutor 先来看一下线程池的构造函数各个参数意义 public ThreadPoolExecutor( int corePoolSize, //核心线程数 int maximumPoolSize, //最大线程数 (核心+非核心线程数) long keepAliveTime, //非核心线程数超时时间 TimeUnit unit, //超时时间单位原创 2021-04-12 22:50:41 · 117 阅读 · 0 评论 -
进程&线程
进程: 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程。 线程: 进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。 多任务就是操作系统可以同时运行多个应用程序。比如说你在用电脑听歌的同时聊天。 比较早的时候,cpu都是单核的, 同样可以执行多任务。 单核CPU是如何执行多任务? 操作系统让各个任务轮流交替执行,由于CPU的执行速度实在是太快了,我们感觉就像所有任务都在同时执行一样。 真正原创 2021-04-10 21:15:03 · 181 阅读 · 0 评论