多线程
并发
向前冲鸭
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
生产者消费者
//模拟生产者生产class Productor implements Runnable{ MyQueue queue; public Productor(MyQueue queue){ this.queue=queue; } @Override public void run() { for(int i=0;i<1000;i++){ try { Thread.sleep(原创 2020-06-25 16:42:33 · 182 阅读 · 0 评论 -
4种方式顺序打印ABC
synchronizedpublic class Main{ private static volatile int state; public static void main(String[] args) { Object o=new Object(); //打印A new Thread(()->{ //final int num=state; for(int i=0;i<10;原创 2020-06-19 13:07:13 · 767 阅读 · 0 评论 -
顺序打印ABC&生产者消费者 模型
按顺序打印ABC,每个都打印10次public class Main{ private static volatile int state; public static void main(String[] args) { Object o=new Object(); //打印A new Thread(()->{ //final int num=state; for(int i=0;i&l原创 2020-06-15 14:21:45 · 257 阅读 · 0 评论 -
volatile
volatile有两个重要的功能:保证可见性和建立内存屏障禁止指令重排序。可见性为什么会有可见性问题?早期的计算机CPU的处理速度和内存的存取速度相差不大,但是现在的计算机CPU的运行速度已经远超内存的存取速度,这样的话,由于CPU处理的速度过快,CPU可能会等内存,为了能减小两者的差异,就出现了一个高速缓存区域来作为缓冲,高速缓存介于CPU和内存之间,每次CPU读和写操作都会直接跟高速缓存打交道,等操作完毕后,再刷新到内存;JMM也是如此,为了提高效率,每个线程都有自己的工作内存,每个线程的操作原创 2020-06-10 10:19:54 · 173 阅读 · 1 评论 -
多线程基础
进程和线程简单来说,一个程序就是一个进程,一个程序的多项任务就是多线程。进程就是一个程序执行时的实例,一个程序运行起来就会创建一个进程,然后系统给它分配资源,把它放到进程就绪队列里,等CPU调度到它,就给它分配调度时间,真正运行起来。一个线程就是一条执行路径。进程是系统分配资源的基本单位,线程是系统调度的基本单位;一个进程可以有多条线程,一条线程只能属于一个进程,但每个进程里面肯定会有一条主线程;一个进程里面的资源可以共享,每个线程都有各自的虚拟机栈,本地方法栈,程序计数器来保存自己的信息(上下文)。原创 2020-05-22 15:43:26 · 238 阅读 · 0 评论 -
并发编程
一提到并发编程,就需要从安全和效率两方面进行考虑,我们使用并发编程的目的是提高效率,充分利用CPU的空闲时间,更好的利用CPU,但是会有安全问题,也就是在多线程环境下的运行结果跟在单线程下的运行结果不一致。创建线程的几种方式继承Thread类,重写run()方法,是将run()方法写在子类中,重写后就直接调用重写的run()方法,不再进行Runnable是否为空的判断,但是因为Java中是单继承,继承了Thread类,就不能再继承别的类了,所以会给继承方面带来缺陷。public class Tes原创 2020-06-08 13:14:20 · 365 阅读 · 0 评论
分享