多线程
文章平均质量分 67
mameng1998
学习是前进的唯一动力
展开
-
线程池线程数量和数据库连接池大小设置
理论上,线程数量设置为CPU核数时,并且线程没有等待的情况下,CPU几乎不会发生线程上下文切换,这个时候程序的执行效率是最高的。实际情况下,对于一个请求/响应模型的服务,并发线程数设置为CPU核数N倍时性能最佳。这个N取决于业务逻辑的执行时间、线程等待时间等因素,N的大致的经验值范围是[2, 10]。使用异步模型编写微服务,配合异步IO或者IO多路复用,可以有效的避免线程等待,用少量的线程处理大量并发请求,大幅减少线程上下文切换的开销,从而达到提升服务总体性能的效果。数据库连接池大小 = (cp原创 2021-11-15 22:40:57 · 2175 阅读 · 0 评论 -
TransmittableThreadLocal实现原理
1ThreadLocal实现原理// ThreadLocal.set()源码public void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) map.set(this, value); else createMap(t, value);}ThreadLocalMap保存...原创 2021-11-12 18:42:08 · 868 阅读 · 0 评论 -
记TransmittableThreadLocal使用不当造成的一次线上事故
前言我们知道InheritableThreadLocal解决父子线程的问题,它是在线程创建的时候进行复制上下文的,即线程池在创建子线程时,会把父线程中共享变量的值初始化复制到子线程中,如果父线程再将共享变量中的值进行修改,那么子线程就无法感知到这个共享变量的修改。那么对于线程池已经创建完的线程,这个线程中共享变量的值永远是初始化时从父线程中获取的,父线程中共享变量的值再怎么改变,这个线程中的共享变量值也不会改变。这时,TransmittableThreadLocal就诞生了,它可以解决上述问题。但如原创 2021-11-12 14:50:00 · 3033 阅读 · 0 评论 -
Java线程池ThreadPoolExcutor
1.线程池的工作原理:1.1 线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。1.2 当调用execute()方法添加一个任务时,线程池会做如下判断:a.如果正在运行的线程数小于corePoolSize,那么马上创建线程运行这个任务。b.如果正在运行的线程数大于或者等于corePoolSize,那么将这个任务放入队列。c...转载 2019-11-22 17:31:26 · 214 阅读 · 0 评论 -
springboot之异步调用@Async
为了提高服务的响应效率,我们需要用到方法的异步调用,之前大部分都是使用多线程来完成此类任务,其实,在spring 3.x之后,就已经内置了@Async来完美解决这个问题,本文将介绍在springboot中如何使用@Async。1 在pom.xml文件中引入依赖 <dependencies> <dependency> <groupId>org.springframework.boot</groupId>原创 2021-01-04 19:11:09 · 174 阅读 · 2 评论 -
java.util.concurrent包中线程安全的集合
Blocking集合ReadWriteLockReentrantLockAtomic原创 2019-10-15 13:20:18 · 495 阅读 · 1 评论 -
Java关键字--volatile
如果你声明变量是使用了volatile修饰符,编译器就不会把这个变量缓存在寄存器里——每次访问都将去存取变量在内存中的实际位置。在Java中设置变量值的操作,除了long和double类型的变量外都是原子操作,也就是说,对于变量值的简单读写操作没有必要进行同步。这在JJVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JJVM的成熟转载 2017-09-11 23:52:34 · 256 阅读 · 0 评论 -
实现Runnable的线程类和继承Tread的线程类之间的区别
实现Runnable的线程类实例化后必需放在new Tread()中创建一个新线程,然后才可以启动,例如:// 通过实现 Runnable 接口创建线程public class DisplayMessage implements Runnable{ private String message; public DisplayMessage(String message)原创 2017-09-12 12:23:21 · 504 阅读 · 0 评论 -
Java实现两个线程交替打印0~100的奇数和偶数
本题的意思:启动两个线程,一个线程打印奇数,另一个线程打印偶数,并实现交替打印。代码如下:public class SelfTest { private static int count = 0; private static final Object lock = new Object(); public static void main (String[] args...转载 2019-03-13 00:13:31 · 1321 阅读 · 1 评论