这里解释下为啥会得不到 10(知道的可直接跳过), i++ 这个操作,计算机需要分成三步来执行。 1、读取 i 的值。 2、把 i 加 1. 3、把 最终 i 的结果写入内存之中。 所以,(1)、假如线程 A 读取了 i 的值为 i = 0,(2)、...

简易web服务器 0.web服务器知识储备 1.简易web服务器-版本1 2.简易web服务器版本2-多线程版 3.1简易web服务器版本3-访问图片资源 3.2简易web服务器版本3-访问外链地址测试 4.简易web服务器-版本4-连接池版 0.web服务器知识储备 web服务器知识储备,了解网络编程,其实就是java的socket。如果实现网络请求,也就是服务端能够接收客户端的请求,然后服务端...

文章目录 重排序 什么是重排序 数据依赖性 as-if-serial语义 指令重排序分类 重排序会产生什么问题 happen-before概述 ·1)程序顺序规则: ·2)监视器锁规则: ·3)volatile变量规则: ·4)传递性: 5)start()规则: 6)join()规则: 锁的内存语义 1.锁的释放-获取建立的happens-b...

文章目录 一.synchronized的缺陷 二.java.util.concurrent.Lock包下常用的类 1.Lock 2.ReentrantLock 3.ReadWriteLock 4.ReentrantReadWriteLock 5.Lock和synchronized的选择 三.锁的相关概念介绍 1.可重入锁 2.可中断锁 3.公平锁 4.读写锁 四.总结 1.用法比较 2.特性比较 ...

线程池 1、三大方法 2、七大参数 我们通过阅读源码可以发现,上面创建线程池的方法底层都是调用ThreadPoolExecutor这个方法进行的,它又七个参数。 以银行办业务为例解释一下这七大参数。 图1 图2 3、四种拒绝策略 4、自定义线程池 测试 5、如何合理的设置最大线程数? 分析下线程池处理的程序是CPU密集型,还是IO密集型 (1)CPU密集型 CPU密集型也叫计算密集型,指的是系统的...

线程的基本认识及操作

并发编程  

  

2020-04-16 00:52:06

线程的基本介绍 什么是线程 线程是操作系统能够进行运算调度的最小单位。它被包含在进程之中,是进程中的实际运作单位。 进程的执行逻辑 为什么会有线程 多线程的本质是:合理的利用多核心CPU资源来实现线程的并行处理,来实现同一个进程内的多个任务的并行执行,同时基于线程本身的异步执行特性,提升任务处理的效率。 在多核CPU中,利用多线程可以实现真正意义上的并行执行 在一个应用进程中,会存在多个同时执行的...

1、ReadWriteLock 2、BlockingQueue (1)队列 队列的特点:先进后出,对头出,对尾入。 什么时候会发生阻塞? 对列已满,但还想再入队列 队列为空,想要出队列 (2)阻塞队列的继承关系 (3)使用 四组API 方法 抛出异常 不抛出异常 阻塞等待 超时等待 添加 add offer put offer (参数可以设置阻塞时间) 移除 remove poll take po...

文章目录 高效并发 1.join的理解 2.sleep的理解 3.wait的理解 4.线程状态 5.线程状态转换 ① 新建--->可运行--->被终止 ② 新建--->可运行--->被阻塞--->可运行--->被终止 ③ 新建--->可运行--->等待--->可运行--->被终止 1. Object.wait() 2. java.util...

死锁及其解决

并发编程  

  

2020-05-23 18:10:39

1、死锁概述 锁在开发中会经常用到,使用起来也是非常简单。但是如果业务比较复杂,使用不当的话,会出现死锁, 这是非常严重的问题。下面代码会造成死锁。 在一些复杂的场景下,可能会出现上述情况。 究其原因,t1因为某些情况没有释放掉A锁,t2在获取B锁的情况下去拿A锁,此时A锁被占用拿不到,t1在释放掉A锁的情况下,去拿B锁,此时B锁又被t2占有。导致t1,t2相互占用对方待获取的锁,且又互不相让,形...

文章目录 一、multiprocessing模块介绍 二、Process类的介绍 1、创建进程的类 2、方法介绍 三、 Process类的使用 四、创建并开启子进程的两种方式 1、方法一 2、方法二 五、各个进程的内存空间是隔离的 六、Process对象的各种方法 1、join方法 2、其他方法(了解) (1)terminate与is_alive (2)name与pid (3)os.getpid和...

下面是小凰凰的简介,看下吧! 💗人生态度:珍惜时间,渴望学习,热爱音乐,把握命运,享受生活 💗学习技能:网络 -> 云计算运维 -> python全栈( 当前正在学习中) 💗您的点赞、收藏、关注是对博主创作的最大鼓励,在此谢过! 有相关技能问题可以写在下方评论区,我们一起学习,一起进步。 后期会不断更新python全栈学习笔记,秉着质量博文为原则,写好每一篇博文。 文章目录 一 ...

CAS原理

并发编程  

  

2020-06-11 08:06:42

文章目录 什么是CAS 案例演示 应用场景 缺点 什么是CAS 处理并发问题 我认为V的值应该是A,如果是的话我就把它修改成B,如果不是A,那么说明A被人修改过了,那我就不修改了,避免多人同时修改造成错误, CAS 有3个操作数,内存值 V,预期值A,要修改的值 B,当且仅预期值A和内存值V 相同时,才将内存值修改为 B, 否则什么都不做,最后返回现在的 V 值 CAS算法理解 (1)与锁相比,使...

概述 可重入锁,简单地讲就是:“同一个线程对于已经获得到的锁,可以多次继续申请到该锁的使用权”。而 synchronized 关键字隐式的支持重进入,比如一个 synchronized修饰的递归方法,在方法执行时,执行线程在获取了锁之后仍能连续多次地获得该锁。ReentrantLock 在调用 lock()方法时,已经获取到锁的线程,能够再次调用lock()方法获取锁而不被...

Java并发容器和框架 Java程序员进行并发编程时,相比于其他语言的程序员而言要倍感幸福,因为并发编程大师Doug Lea不遗余力地为Java开发者提供了非常多的并发容器和框架。本章让我们一起来见识一下大师操刀编写的并发容器和框架,并通过每节的原理分析一起来学习如何设计出精妙的并发程序。 ConcurrentHashMap的实现原理与使用 ConcurrentHashMap是线程安全且高效的Ha...