并发编程
科氏加速度
岁寒,然后知松柏之后凋也。
展开
-
用mysql锁保证线程安全
需求场景一:多线程对表的一个计数字段原子性递增+1 场景二:多线程查询表的一条未删除数据,获取后将数据标记为删除,每个线程不能获取相同数据在数据库压力小的业务场景,可以借用mysql锁去实现业务逻辑。概念锁:mysql按锁的范围有库锁、表锁、行锁、间隙锁,常用的Innodb引擎锁的粒度是行锁,其他不提供事务的MyIsam、Memory 锁的粒度是表锁。 锁的时间:如果是update语句,执行update语句开始上锁,事务结束时,释放锁。所以平常编码中,尽量将修改删除方法放在一个事务中的最后原创 2020-12-19 15:16:54 · 1083 阅读 · 1 评论 -
线程基础
1.CPU个人pc机一般只有一个cpu,服务器通常有多个cpu。查看window,设备管理器,几核:查看cpu数,命令行写:systeminfo,下图是一个处理器在cmd命令中输入“wmic”,然后在出现的新窗口中输入“cpu get *”。NumberOfCores:表示CPU核心数NumberOfLogicalProcessors:表示CPU线程数:这机子六...原创 2019-11-07 17:13:48 · 191 阅读 · 0 评论 -
如何配置线程池
参考:并发编程从入门到精通一书参考:这篇也有意思https://www.cnblogs.com/dennyzhangdd/p/6909771.html?utm_source=itdadao&utm_medium=referral没有绝对的配置,根据业务、机器、程序看情况配置一.业务情况1.任务的性质:cpu‘密集型(程序计算)和io密集型(网络io磁盘io、db)2.任...原创 2018-12-08 13:11:53 · 975 阅读 · 0 评论 -
网络io、磁盘io、db和多线程开发
线程池配置中要看项目是程序密集型还是io密集型,从而配置不同的线程数量。如果是io密集型,推荐2*Ncpu的线程数量,因为在io中,线程是阻塞的,cpu没有被占用太多。由此查询了一些关于cpu和io关系的资料,主要是从软件开发的角度简单了解下,方便提高程序的性能io其实就是读写,io分为网络io和磁盘io:网络io就不用说了,代码里发起调用其他服务的接口,必然会导致线程阻塞,直到获取结果,cp...原创 2018-12-08 12:13:21 · 937 阅读 · 0 评论 -
线程池和tomcat
线程池和tomcat1.tomcat如何配置线程池<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4" maxIdleTime="60000"/>最大线程数150,最大空闲线程4,空闲线程最大等待时间60s原创 2018-12-08 16:16:51 · 227 阅读 · 0 评论 -
@Async、CompletableFuture、异步非阻塞、响应式编程
@Asyncspring提供的,使用时是通过线程执行的,spring会提供默认的线程池(同样底层是ThreadPool),我们也可以自定义线程池代替默认的是执行。虽然名字是异步,但执行后的结果是Future或void或Asyncresult,需要自己手动获取结果,并不能主动监听,执行完成后做一些处理。所以我认为只能算非堵塞的一种方式,不能算响应式异步。简单用法https://www...原创 2019-03-26 21:13:53 · 5740 阅读 · 0 评论 -
java线程池
参考:http://www.cnblogs.com/aspirant/p/6920418.html一.什么是线程池1.java产生对象和销毁对象非常耗资源,虚拟机会追踪每一个对象,以便在对象销毁后进行垃圾回收。所以提高效率的一个方法就是尽可能减少对象的创建和销毁,特别是一些很耗费资源的对象,比如数据库连接对象。池化技术产生的原因就是减少对象的创建和销毁,利用已有的对象。如果每次进入...原创 2018-11-20 22:28:52 · 103 阅读 · 0 评论 -
AQS AbstractQueuedSynchronizer
一。介绍 AbstractQueuedSynchronizer(以下简写AQS)这个抽象类,它是 Java 并发包的基础工具类,是实现 ReentrantLock、CountDownLatch、Semaphore、FutureTask 等类的基础。compareAndSetState这个方法就是利用CAS去设置状态,即线程安全的,同一时刻只有一个线程能调用ReentrantLo...原创 2018-11-10 13:12:30 · 140 阅读 · 0 评论 -
ReentrantLock公平锁和非公平锁
公平锁是指多个线程在等待同一个锁时,必须按照申请锁的先后顺序来一次获得锁。公平锁的好处是等待锁的线程不会饿死,但是整体效率相对低一些;非公平锁的好处是整体效率相对高一些,但是有些线程可能会饿死或者说很早就在等待锁,但要等很久才会获得锁。其中的原因是公平锁是严格按照请求所的顺序来排队获得锁的,而非公平锁时可以抢占的,即如果在某个时刻有线程需要获取锁,而这个时候刚好锁可用,那么这个线程会直接抢占,...原创 2018-11-01 22:15:38 · 568 阅读 · 1 评论 -
CompareAndSet(CAS)
转载:http://flychao88.iteye.com/blog/2269438转载:https://blog.csdn.net/gooooooal/article/details/52061932?utm_source=blogxgwz4一、CAS简介CAS:Compare and Swap, 翻译成比较并交换。 CAS指令在Intel CPU上称为CMPXCHG指令,它的作...转载 2018-11-10 12:34:08 · 5594 阅读 · 0 评论 -
同步计数器·Semaphore
一.Semaphore又称信号量,是操作系统中的一个概念,在Java并发编程中,信号量控制的是线程并发的数量。Semaphore管理一系列许可证。每个acquire方法阻塞,直到有一个许可证可以获得然后拿走一个许可证;每个release方法增加一个许可证,这可能会释放一个阻塞的acquire方法。然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。 ...原创 2018-11-11 13:51:56 · 641 阅读 · 0 评论 -
同步计数器CountDownLatch 和CyclicBarrier
CountDownLatch ,把一个工作分给5个人,5个线程都执行完了,调用countDown,给计数器减数,而主线程await,等数为零,主线程继续往下执行,即5条线程都完成才算工作完成。内部很简单,还是继承AQS,把设置的数量赋值给state,countDown就减state,await想必挂起线程和解放线程。CyclicBarrier 这么打比方,5个线程,每个人的工作分成两部分,...原创 2018-11-11 18:45:33 · 158 阅读 · 0 评论 -
ThreadLocal
先看个例子主线程和子线程都对 类成员变量u进行修改,两者的修改都会影响主线程的输出u,最后结果可能是2也可能是3public class Test { private static Integer u = 1; public static void main(String[] args) { Thread t = new Thread(new Runnable() ...原创 2018-10-21 13:54:45 · 537 阅读 · 1 评论 -
CopyOnWrite机制
并发编程从入门到精通学习记录:CopyOnWrite容器通俗地讲,当我们往容器中添加一个元素的时候,不是直接添加,而是对当前容器copy,复制一个容器,在这个复制的容器中添加元素,添加完之后,再将引用指向这个新容器。优点:CopyOnWrite容器可以并发的进行读操作,而不需要加锁,因为 当前容器不会添加任何元素,所以这也是一种读写分离的思想,读和写的操作分开了。缺点:1.内存...原创 2018-11-08 20:57:16 · 3565 阅读 · 0 评论 -
线程的中断机制
参考:http://www.cnblogs.com/onlywujun/p/3565082.html一。中断有关的三个方法interrupt()并不是直接打断线程,只是将这个线程的中断状态标志设置为true。线程无法直接中断,但线程本身可以通过isInterrupted() 或 interrupted()方法检测自己是不是被设置了中断状态,但检测到了也不意味着线程就被中断了,检测到...原创 2018-11-08 22:52:20 · 511 阅读 · 0 评论 -
ReentrantLock和Condition
转载:http://www.cnblogs.com/sheeva/p/6484224.html概述先来回顾一下java中的等待/通知机制我们有时会遇到这样的场景:线程A执行到某个点的时候,因为某个条件condition不满足,需要线程A暂停;等到线程B修改了条件condition,使condition满足了线程A的要求时,A再继续执行。自旋实现的等待通知最简单的实现方法就是将c...转载 2018-11-01 21:07:06 · 281 阅读 · 0 评论