
高并发
文章平均质量分 86
楚景然
风起于青萍之末 浪成于微澜之间
展开
-
初识并发编程(拓展)
1:死锁 1.1基础 所谓死锁,是指多个进程在运行过程中因争夺资源而造成的一种僵局,当进程处于这种僵持状态时,若无外力作用,它们都将无法再向前推进。 线程死锁是指由于两个或者多个线程互相持有对方所需要的资源,导致这些线程处于等待状态,无法前往执行。当线程进入对象的synchronized代码块时,便占有了资源,直到它退出该代码块或者调用wait方法,才释放资源,在此期间,其他线程将不能进入该代码块。 当线程互相持有对方所需要的资源时,会互相等待对方释放...原创 2021-10-28 11:04:13 · 317 阅读 · 0 评论 -
初识并发编程(六) 线程池
1:new Thread 弊端 每次 new Thread 新建对象,性能差。 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多系统资源导致死机或 OOM。 缺少更多功能,如更多执行、定期执行、线程中断。 2:线程池的好处 重用存在的线程,减少对象创建、消亡的开销,性能佳。 可有效控制最大并发线程数,提高系统资源利用率,同时可以避免过多资源竞争,避免阻塞。 提供定时执行、...原创 2021-10-28 10:57:23 · 226 阅读 · 0 评论 -
初识并发编程(五) 初识 J.U.C
1:基础 在 Java 5.0 提供了 java.util.concurrent (简称JUC )包,在此包中增加了在并发编程中很常用的实用工具类,用于定义类似于线程的自定义子系统,包括线程池、异步 IO 和轻量级任务框架。提供可调的、灵活的线程池。还提供了设计用于多线程上下文中的 Collection 实现等。 2:AQS(AbstractQueuedSynchronizer) AQS,在java.util.concurrent.locks包中,Abstr...原创 2021-10-28 10:25:15 · 332 阅读 · 0 评论 -
初识并发编程(四) 线程安全策略
1:不可变对象 让对象在多个线程保证 保证对象是线程安全,实际是躲避了并发。 1:对象创建以后其状态就是不可修改 2:对象所有域都是final类型 3:对象都是正确创建的(在创建期间,this引用没有溢出)。final class(不能被集成)。private 成员,使其不能被外部访问。没有SetXXX,让其不能被外部赋值,所有可变成员设置为final... demo1: final关键字 :可以 修饰 类(不能被集成,尽量不要用来修饰类)、方法(1:锁定方法不能被集成类...原创 2021-10-27 17:09:37 · 247 阅读 · 0 评论 -
初识并发编程(三) 发布对象
1.基础 发布:使对象能够在当前作用域之外的代码中使用 对象逸出:一种错误的发布,当一个对象还没构建完成时,就被其他线程所见。 不安全发布: 这个代码通过public访问级别发布了类的域,在类的任何外部的线程都可以访问这些域 我们无法保证其他线程会不会修改这个域,从而使私有域内的值错误(上述代码中就对私有域进行了修改) package com.mmall.concurrency.example.publish; import com.mmall.concurren...原创 2021-10-27 14:31:10 · 182 阅读 · 0 评论 -
初识并发编程(二) 并发编程与线程安全
1:线程安全性 1.1定义 定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作。 可见性:一个线程对主内存的修改可及时的被其他线程观察到。 有序性:一个线程观察其他线程中的指令执行顺序,由于指令重排序的存在,该观察结果一般...原创 2021-10-27 11:27:49 · 170 阅读 · 0 评论 -
初识并发编程(一) 基础理论
1:基础 并发:同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时"存在"的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行. 高并发:高并发( High Concurrency )是互联网分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行处理很多请求. 高并发相关常用的一些指标有响应时间(Res...原创 2021-10-27 10:27:49 · 170 阅读 · 0 评论