
高并发编程
资深糖分大叔
自律给人自由
展开
-
多线程设计架构模式之监控任务的生命周期
虽然Thread为我们提供了可获取状态,以及判断是否alive的方法,但这些方法均是针对线程本身的,而我们提交的任务Runnable在运行过程中所处的状态如何是无法直接获得的,比如它什么时候开始,什么时候结束,最不好的一种体验是无法获得Runnable任务执行后的结果。一般情况下想要获得最终结果,我们不得不为Thread或者Runnable传入共享变量,但是在多线程情况下,共享变量将导致资源的竞争...原创 2019-12-23 11:29:11 · 206 阅读 · 0 评论 -
高并发场景下的单例设计模式
饿汉式在类初始化时创建可以保证多个线程下的唯一实例,getInstance()的性能也比较高,但是无法进行懒加载package com.example.demo.singleton;public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {...原创 2019-12-13 13:31:02 · 306 阅读 · 0 评论 -
深入理解volatile关键字
volatile关键字的介绍volatile关键字只能修饰类变量和实例变量,对于方法参数、局部变量以及实例常量、类常量都不能进行修饰。CPU Cache 模型三级缓存CPU Cache又是由很多个Cache Line 构成,Cache Line 可以认为是 CPU Cache中的最小缓存单位,大小64字节...原创 2019-12-13 10:54:35 · 393 阅读 · 0 评论 -
线程池原理
动手实现线程池package com.example.demo.threadpool;public interface ThreadPool { /** * 提交任务到线程池 * @param runnable 任务 */ void execute(Runnable runnable); /** * 关闭线程池 */ void shutdown(); /*...原创 2019-12-12 14:40:59 · 291 阅读 · 0 评论 -
线程间通信
同步阻塞与异步阻塞单线程间通信轮询机制:不断地轮询,如果有数据则读取数据并处理,如果没有则等待若干时间再次轮询通知机制:如果队列中有Event,则通知工作的线程开始工作,没有Event,则工作线程休息并等待通知wait 和 notify简单的生产者消费者package com.example.demo.thread;import java.util.LinkedList;p...原创 2019-12-11 18:34:23 · 131 阅读 · 0 评论 -
线程安全与数据同步
共享资源共享资源指的是多个线程同时对同一份资源进行访问(读写操作),被多个线程访问的资源就称为共享资源,如何保证多个线程访问到的数据是一致的,则被称为数据同步或者资源同步。synchronized关键字synchronized关键字可以实现一个简单的策略来防止线程干扰和内存一致性错误,如果一个对象对多个线程是可见的,那么对该对象的所有读或者写都将通过同步的方式来进行。synchroni...原创 2019-12-11 16:12:31 · 242 阅读 · 0 评论 -
JAVA多线程的创建和API
多线程的创建方式创建Thread类:new Thread()实现Runnable接口:Runnable线程的生命周期NEWRUNNABLERUNNINGBLOCKEDTERMINATEDNEW: 创建状态使用new关键字创建的对象RUNNABLE:可执行状态具备执行的资格,但并没有真正的执行起来而是在等待CPU的调度NEW状态通过start方法进入RUNNAB...原创 2019-12-10 18:44:26 · 206 阅读 · 0 评论