Java并发
tongdanping
知识,哪怕是知识的幻影,也会成为你的铠甲,保护你不被愚昧反噬。
展开
-
解决 Mybatis Generator由表字段使用关键字导致的异常方案
引言前几天由于用python拉取第三方接口的数据以后,他们直接返回建表的字段和命令,也就说我们必须按照他们设定的字段名称来使用,他们的命名里面有很多的mysql的关键字,这就说我们写sql的时候,需要注意关键字,但是我们后端用的mybatis Generator,这就导致各种错误,因为之前没有遇到过这种场景,所以晚上查询了很多资料,最后在官网上找到了解决方案,其实很简单。在context...转载 2019-11-07 15:37:25 · 658 阅读 · 0 评论 -
用@Value注解直接注入properties中的值
有两种方式可以实现用@Value注解直接将properties中的值注入变量,一种是@Value("${key}"),一种是@Value("#{beanName[key]}"),他们本质上是实现了不同的类一、@Value("${key}"),实现PropertyPlaceholderConfigurer类demo:https://blog.csdn.net/lyz_112233/artic...原创 2019-07-25 11:22:06 · 6181 阅读 · 0 评论 -
Java并发——Synchronized关键字和锁升级,详细分析偏向锁和轻量级锁的升级
目录一、Synchronized使用场景二、Synchronized实现原理三、锁的优化1、锁升级2、锁粗化3、锁消除一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchronized关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二...原创 2018-03-22 17:01:42 · 116157 阅读 · 64 评论 -
Java并发——深入理解Executor框架FutureTask类
一、什么是Future和FutureTask一直以来都对FutureTask这个“Future”不理解,为什么叫做“未来的任务呢”?这个“Future”体现在哪里呢?现在终于明白,FutureTask的Future就源自于它的异步工作机制,如果我们在主线程中直接写一个函数来执行任务,这是同步的任务,也就是说必须要等这个函数返回以后我们才能继续做接下的事情,但是如果这个函数返回的结果对接下来的任务并...原创 2018-03-20 21:56:33 · 4957 阅读 · 0 评论 -
Java并发——Executor框架ScheduledThreadPoolExecutor详解
ScheduledThreadPoolExecutor类继承了ThreadPoolExecutor并实现了ScheduledExecutorService接口。主要用于在给定的延迟后执行任务或者定期执行任务。作用类似于java.util包下的Timer类,但是比Timer功能更强大、更灵活,因为Timer只能控制单个线程延迟或定期执行,而ScheduledThreadPoolExecutor对应的...原创 2018-03-20 16:22:06 · 3760 阅读 · 0 评论 -
Java并发——Executor框架ThreadPoolExecutor详解
ThreadPoolExecutor是Executor接口的一个重要的实现类,是线程池的具体实现,用来执行被提交的任务。一、ThreadPoolExecutor的创建:直接创建ThreadPoolExecutor的实例对象,这样需要自己配置ThreadPoolExecutor中的每一个参数:ThreadPoolExecutor tpe = new ThreadPoolExecutor(int co...原创 2018-03-20 14:25:41 · 9595 阅读 · 7 评论 -
Java并发——关于Java内存模型(JMM),你需要知道什么?
一、JMM采用的什么内存模型?我们这个内存模型看起来是怎么样的?并发编程中有两个主要的问题,一个是不同的线程之间怎么通信;二个是如何保证不同线程之间的同步。如果一个模型能够解决这两个问题,那么就可以用来描述并发编程模型。在命令式编程中,线程之间通信的方式有两种,一种是通过共享内存在实现通信,称为共享式的并发模型;另一种是显式的发送消息来实现通信,称为消息传递式的并发模型。在内存共享式的并发模型中,...原创 2018-03-22 22:50:01 · 513 阅读 · 0 评论 -
Java并发——Executor框架详解(Executor框架结构与框架成员)
一、什么是Executor框架?我们知道线程池就是线程的集合,线程池集中管理线程,以实现线程的重用,降低资源消耗,提高响应速度等。线程用于执行异步任务,单个的线程既是工作单元也是执行机制,从JDK1.5开始,为了把工作单元与执行机制分离开,Executor框架诞生了,他是一个用于统一创建与运行的接口。Executor框架实现的就是线程池的功能。二、Executor框架结构图解1、Executor框...原创 2018-03-20 21:58:27 · 80503 阅读 · 12 评论 -
Java并发——线程池工作原理及使用
一、什么是线程池?为什么要使用线程池?线程池的优点?1、什么是线程池?线程池是指在初始化一个多线程应用程序过程中创建一个线程集合,然后在需要执行新的任务时重用这些线程而不是新建一个线程。线程池中线程的数量通常完全取决于可用内存数量和应用程序的需求。然而,增加可用线程数量是可能的。线程池中的每个线程都有被分配一个任务,一旦任务已经完成了,线程回到池子中并等待下一次分配任务。2、为什么要使用线程池?因...原创 2018-03-18 20:44:09 · 2373 阅读 · 0 评论 -
Java并发——Java中的并发类工具
在JDK的并发包里面提供了几个非常有用的工具类:CountDwonLatch、CyclicBarrier、Semaphore、Exchanger。其中CountDwonLatch、CyclicBarrier、Semaphore工具类提供了一种并发流程控制的手段,Exchanger提供了一种在线程间交换数据的手段。一、四种并发工具类1、CountDwonLatch(闭锁)CountDwonLatch...原创 2018-03-18 14:32:15 · 4592 阅读 · 0 评论 -
Java并发——重入锁ReentrantLock的实现原理及源码解析
1、什么是可重入锁?可重入锁就是对于已经获得锁的线程,可以重复的多次的获得该锁。而不可重入的锁在线程获得该锁后,该线程如果再次请求获得该锁,就会在调用tryAquires()的时候返回false,从而阻塞自己。2、可重入锁的实现原理?要实现可重入锁的关键有两个,一个怎么识别当前请求锁的线程是不是已经获取锁的线程,另一个因为在一个线程重复的获取了n次锁以后,必须要释放n次锁才能完全释放锁,这怎么实现...原创 2018-03-16 14:21:26 · 585 阅读 · 0 评论 -
Java并发——ReentrantLock的公平锁与非公平锁
一、锁的公平性含义所谓公平锁,就是在绝对时间上,先对锁发起获取请求的一定先被满足,那么这个锁是公平的,反之,则是非公平的。因为ReentrantLock的实现是通过自定义的静态内部类sync实现的,sync继承了AbstractQueuedSynchronizor抽象类,因此ReentrantLock也是实现了基于双向链表的同步队列,也就是说,如果每次都是选择队列头的Node关联的线程获取锁,那就...原创 2018-03-16 15:34:10 · 1229 阅读 · 0 评论 -
Java并发——并发容器ConcurrentHashMap实现原理
一、ConcurrentHashMap的实现原理ConcurrentHashMap的“锁分段”就是把数据分段,然后每段有一个锁,这样当不同的线程访问不同段的数据时,就不会发生锁竞争了。那么“锁分段”是怎么实现的呢,那就需要看看ConcurrentHashMap的底层实现结构了。ConcurrentHashMap是由Segment数组加HashEntry数组构成的,如下图所示:其中Segment是一...原创 2018-03-15 20:22:35 · 715 阅读 · 0 评论