![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
baxxdwyp
这个作者很懒,什么都没留下…
展开
-
上下文切换
引题:为什么有时候线程越多反而耗时越多 即便是单核处理器,也是支持多线程执行代码的,CPU会给每个线程分配CPU的时间片来实现。 时间片就是CPU分给线程的时间,因为时间片非常短,所以CPU通过不断的切换线程,来让我们觉得多线程是同时进行的 那么耗时出现在哪里了,就是上下文切换过多,引起的时间消耗,当然包括线程的创建和销毁 具体的概念:当前任务执行一个时间片后会切换到下一个时间片,在切换前会保存上一个任务的状态,以便下次切换回这个任务时,可以再加载这个任务的状态。所以任务从保存到再加载的过程就是一次上下文切原创 2021-07-17 16:44:37 · 176 阅读 · 0 评论 -
ReentrantLock介绍和简单使用
1.简介 reentrantLock和synchronized比较 (1)reentrantLock和synchronized都是独占锁,前者需要主动的加锁和释放锁,后者加锁解锁的过程会自动进行。 (2)reentrantLock和synchronized都是可重入的,前者加锁和释放锁的次数必须一致,否则会一直进入等待,后者不必担心最后是否释放了锁。 (3)reentranLock可以响应中断,synchronized不能响应中断,一个线程获取不到锁就一直等待。 (4)reentrantLock可以实现公平原创 2020-05-17 22:56:21 · 342 阅读 · 0 评论 -
《学习多线程04》关键字synchronized
1. 为什么要用Synchronized synchronized是并发编程中不可缺少的一部分,可以保证在同一时刻,只会有一个线程执行方法或代码块。 2. Synchronized能做什么 (1)修饰普通方法,锁的是当前方法,要进入需要先获得该方法的锁。 (2)修饰静态方法,锁的是当前Class对象,进入需要获取Class的锁。 (3)修饰代码块,锁的是括号里的对象,进入需要获取对象的锁。 字面...原创 2020-01-20 20:49:22 · 91 阅读 · 0 评论 -
《学习多线程03》关键字volatile
volatile的基础知识 1.可见性,保证不同线程操作该变量的可见性,即一个线程修改该变量,这个新的值对其他线程来说是立刻知道的 2.禁止进行指令重排序(虚拟机层面,有自己的规则,对代码进行排序),有序性 3.volatile只能保证单次读/写的原子性。i++这种不能保证 简单实战 1.volatile定义的值改变,其他线程能否查看(可见性) public class VolatileTestO...原创 2020-01-13 16:19:06 · 98 阅读 · 0 评论 -
《学习多线程02》线程池的概念和使用
核心线程类ThreadPoolExecutor public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, T...原创 2020-01-09 09:33:45 · 101 阅读 · 0 评论 -
《学习多线程01》创建多线程
1.实现Runnable接口 public class ThreadDemo implements Runnable { private volatile String threadName; ThreadDemo( String name) { threadName = name; System.out.println("Creating " +...原创 2020-01-07 15:10:07 · 61 阅读 · 0 评论