
多线程
文章平均质量分 91
此生辽阔
这个作者很懒,什么都没留下…
展开
-
牛客刷题笔记--并发
1 下面关于并行和并发的区别,说法错误的是?(C)并发计算是一种程序计算的形式,在系统中,至少有两个以上的计算在同时运作,计算结果可能同时发生并行计算指许多指令得以同时进行的计算模式。在同时进行的前提下,可以将计算的过程分解成小部份,之后以并发方式来加以解决并行是同时发生的多个并发事件,并发事件之间一定要同一时刻发生并发是逻辑上的同时发生(simultaneous),而并行是物理上的同时发生答:并发和并行的区别就是一个处理器同时处理多个任务和多个处理器或者是多核的处理器同时处理多个不同的任务。原创 2021-07-06 21:59:46 · 4307 阅读 · 1 评论 -
狂神说JAVA-JUC并发编程(七)JMM Volatile 单例 CAS 原子引用 各种锁的理解
Volatile是Java虚拟机提供的轻量级同步机制1 保证可见性 2 不保证原子性 3 禁止指令重排JMMJAVA内存模型,是一个概念,是不存在的东西,是一种约定关于JMM的同步的约定:1线程解锁的时候必须把共享变量立刻刷新回主内存(因为线程会把主存中的变量拷贝一份,线程操作的都是主存变量的拷贝,所以需要把做的更改刷新回主存)2 线程加锁前,必须读取主存中变量的最新值到线程的工作内存中3加锁和解锁是同一把锁线程 工作内存 主内存(弹幕:工作内存想到那个鱼虚拟机栈帧中的局部变量表 主存原创 2021-07-01 16:40:03 · 269 阅读 · 0 评论 -
狂神说JAVA-JUC并发编程(五)线程池
程序运行的本质是占用系统资源,为了优化资源的使用,引入了池化技术比如线程池、连接池。内存池、对象池jdbc连接池会有一个最小的池(就是默认有几个连接的),有一个最大的池因为连接跟关闭的时候是非常消耗资源的池化技术:事先准备好一些资源,有人要用,就来拿,用完就归还线程池的好处:降低资源消耗,提高响应速度,方便管理线程,线程可以复用,可以控制最大并发数三大方法 7大参数 4种拒绝策略三大方法Executors.newSingleThreadExecutor()package juc;原创 2021-06-27 13:07:41 · 386 阅读 · 1 评论 -
狂神说JAVA-JUC并发编程(四)阻塞队列
队列什么时候会阻塞?答:队满,无法写入元素,如果队列满了,就必须阻塞等待如果队列是空的,必须等待插入元素从下图可以看出blockingqueue与list和set是同级的接口什么情况会使用阻塞队列?多线程(A调用B,必须等B先执行,B没有执行完,A就会挂起或者等待)线程池(出了弹性大小之外,一般会用一个队列去维护里面的大小)学会使用队列添加,移出BlockingQueue的四组API1、抛出异常2、不会抛出异常3、阻塞等待4、超时等待通过观察源码,我们会发现,add和r.原创 2021-06-26 20:11:12 · 193 阅读 · 2 评论 -
狂神说JAVA-JUC并发编程(三)ReadWriteLock
拉姆达表达式无法访问外部变量,只能访问final的,下面的temp定义的时候就默认是final了不加锁我们看看不加锁的情况package juc;import java.util.HashMap;import java.util.Map;/** * Created by 此生辽阔 on 2021/6/26 11:08 */public class ReadWriteLockDemo { public static void main(String[] args) {原创 2021-06-26 17:05:08 · 171 阅读 · 0 评论 -
并发面试题1:synchronized和lock的区别
保证线程安全用synchronized修饰方法或者代码块lock给代码块加锁synchronized和lock的区别synchronized属于jvm层面,是java的关键字,lock是API层面,是java5以后的一个类synchronized底层主要是monitorenter和monitorexitmonitorenter(底层是通过monitor对象来完成,其实wait /notify等方法也依赖于monitor对象,所以只有在同步块或方法中才能调wait/notify等方法syn原创 2021-04-12 10:36:57 · 385 阅读 · 0 评论 -
java多线程专项(进程和线程的区别)
实现多线程的方法:1.继承Thread类2.实现Runnable接口3.实现Callable接口实现多线程的方法:1.继承Thread类2.实现Runnable接口3.实现Callable接口,然后使用 FutureTask包装,因为Callable接口没有实现Runnable接口不能做为Thread的target,而FutureTask是在Java程序中可以取消的异步运算,有可以开始,取消运算,查询运算是否结束,获得查询结果的功能,特别注意的是,如果查询结果时,运算还没完成则会阻塞线程。4原创 2021-03-07 12:05:42 · 665 阅读 · 0 评论 -
狂神说JAVA-JUC并发编程(二)线程不安全的集合、JUC常用的辅助类
总结知识点小狂神的学习方法推荐:1、先会用、2、货比3家,寻找其他解决方案,3、分析源码!Arraylist的foreach遍历方法生成随机字符串的方法:UUID(Universally Unique Identifier):通用唯一识别码并发下 ArrayList 不安全的解决方案;Collections工具类下有同步的集合,比如SynchronizedList线程不安全的集合CopyOnWriteArrayListArrarlist测试(单线程)public class ListTest原创 2021-02-12 16:42:11 · 529 阅读 · 3 评论 -
狂神说JAVA-JUC并发编程(一)线程、生产者消费者、锁、synchronized、Lock
1原创 2021-01-28 19:46:47 · 748 阅读 · 0 评论 -
力扣-多线程专项(一)(按序打印、交替打印、打印零与奇偶数)
1114. 按序打印我们提供了一个类:public class Foo { public void first() { print("first"); } public void second() { print("second"); } public void third() { print("third"); }}三个不同的线程将会共用一个 Foo 实例。线程 A 将会调用 first() 方法线程 B 将会调用 second() 方法线程 C 将会调用 third() 方法原创 2021-01-25 12:49:52 · 723 阅读 · 0 评论 -
狂神说Java-多线程学习笔记
线程简介多任务:边吃饭边玩手机,同时做多件事(但是实际上是分时进行的,大脑分时处理,时间交替很快)多线程:多车道,多条线路同时执行任务普通方法调用和多线程直接调用run和调用start函数的不同,直接调用run函数无法实现多线程在操作系统中运行的程序就是进程(qq,播放器,游戏,IDE),播放视频时有声音,图像,字幕,这些就是由不同的线程控制进程与线程说起进程,就不得不说下程序,程序是数据和指令的有序集合,其本身没有任何运行的含义,是一个静态的概念而进程是执行程序的一次执行过程,它是一个动原创 2021-01-24 21:52:28 · 2309 阅读 · 1 评论 -
一些多线程技术文
进程间通信原创 2020-07-29 18:53:44 · 197 阅读 · 0 评论 -
多线程(三)Java多线程入门
Java多线程入门原创 2020-07-28 09:09:24 · 123 阅读 · 0 评论 -
多线程(二)ThreadLocal
ThreadLocal转载 2020-07-27 18:41:20 · 116 阅读 · 0 评论 -
进程和线程基础知识全家桶,30 张图一套带走
我们写好的一行行代码,为了让其工作起来,我们还得把它送进城(进程)里,那既然进了城里,那肯定不能胡作非为了。城里人有城里人的规矩,城中有个专门管辖你们的城管(操作系统),人家让你休息就休息,让你工作就工作,毕竟摊位(CPU)就一个,每个人都要占这个摊位来工作,城里要工作的人多着去了。所以城管为了公平起见,它使用一种策略(调度)方式,给每个人一个固定的工作时间(时间片),时间到了就会通知你去休息而换另外一个人上场工作。另外,在休息时候你也不能偷懒,要记住工作到哪了,不然下次到你工作了,你忘记工作到哪了,那还怎转载 2020-07-13 10:49:00 · 264 阅读 · 0 评论 -
多线程(一)
能够被多个线程访问到的变量,我们称之为共享变量。在java中共享变量包括实例变量,静态变量,数组元素。他们都被存放在堆内存中。Java内存模型规定所有的变量都是存在主存当中(类似于前面说的物理内存),每个线程都有自己的工作内存(类似于前面的高速缓存)。线程对变量的所有操作都必须在工作内存中进行,而不能直接对主存进行操作。并且每个线程不能访问其他线程的工作内存。volatile关键字:意思就是说,在多线程环境下,某个共享变量如果被其中一个线程给修改了,其他线程能够立即知道这个共享变量已经被修改了,当其他线转载 2020-07-12 14:52:58 · 162 阅读 · 0 评论