- 博客(21)
- 资源 (6)
- 收藏
- 关注
转载 高并发高级篇(四)--线程池工作流程篇
这一篇,我想就线程池的使用从全流程的角度来说下,线程池是如何工作的。我们以一个调用示例,来逐步深入。一、固定大小线程池调用示例1、我们先创建一个corePoolSize大小为5的线程池,然后提交10个任务。public class ThreadPoolDemo {public static class MyTask implements Runnable{ @Overri...
2018-12-26 22:45:03 2164
转载 Java多线程高并发高级篇(三)--线程池核心中拒绝策略解密
在ThreadPoolExecutor的核心构造函数中,最后一个参数就是拒绝策略处理器。拒绝策略是等待任务队列已满,并且线程池处理不了任务时候,就需要一套处理机制,去解决这个问题(是抛弃还是怎么的)。public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...
2018-12-26 22:38:04 532
转载 篇(二)--线程池核心中队列术解密
在JDK的并发包java.util.concurrent下,我们可以找找定义的队列有哪些。我们按照字典序排一下:ArrayBlockingQueue,LinkedBlockingQueue,PriorityBlockingQueue,SynchronousQueue。那定义的这些队列是要用在哪?当然是我们上一帖线程池核心构造函数中说的BlockingQueue workQueue(等待任务存放...
2018-12-26 22:30:05 259
转载 多线程高并发高级篇(一)--线程池核心详解
说核心内容之前,需要问一个问题,既然单个线程的创建和销毁都很简单,我们为什么要使用线程池?使用池化技术是为了什么?估计工作过很多年的老鸟们对这些东西都能说出个一二三来,无非就是以下几点:1、线程相对于进程而言,虽然是轻量级的,但是它的创建依然需要占用我们那点宝贵的内存资源。如果无限制的创建线程,对应垃圾回收而言也是很有压力的,毕竟线程也是对象。使用线程池统一进行线程的调度,便于管理和控制。...
2018-12-26 21:43:53 836
转载 java并发编程 synchronized底层实现
在java代码中使用synchronized可是使用在代码块和方法中,根据Synchronized用的位置可以有这些使用场景:如图,synchronized可以用在方法上也可以使用在代码块中,其中方法是实例方法和静态方法分别锁的是该类的实例对象和该类的对象。而使用在代码块中也可以分为三种,具体的可以看上面的表格。这里的需要注意的是:如果锁的是类对象的话,尽管new多个实例对象,但他们仍然是属于...
2018-12-23 22:11:28 275
转载 java并发编程 ReadWriteLock
一、简介本文参考博客https://www.cnblogs.com/xiaoxi/p/9140541.htmlReentrantLock是排他锁,排他锁在同一时刻仅有一个线程可以进行访问,实际上独占锁是一种相对比较保守的锁策略,在这种情况下任何“读/读”、“读/写”、“写/写”操作都不能同时发生,这在一定程度上降低了吞吐量。然而读操作之间不存在数据竞争问题,如果"读/读"操作能够以共享锁的方式...
2018-12-22 17:05:58 262
转载 java并发编程 Lock
在上一篇文章中我们讲到了如何使用关键字synchronized来实现同步访问。本文我们继续来探讨这个问题,从Java 5之后,在java.util.concurrent.locks包下提供了另外一种方式来实现同步访问,那就是Lock。也许有朋友会问,既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的缺...
2018-12-20 22:32:20 128
转载 Java并发编程:synchronized
虽然多线程编程极大地提高了效率,但是也会带来一定的隐患。比如说两个线程同时往一个数据库表中插入数据,就可能会导致数据库中插入了相同的数据。今天我们就来一起讨论下线程安全问题,以及Java中提供了什么机制来解决线程安全问题。以下是本文的目录大纲:一.什么时候会出现线程安全问题?二.如何解决线程安全问题?三.synchronized同步方法或者同步块一.什么时候会出现线程安全问题?在单线程...
2018-12-20 19:00:43 124
转载 java并发编程 原子类(atomic包)
一、 原子操作类介绍在并发编程中很容易出现并发安全的问题,比如多个线程执行i++操作,就有可能获取不到正确的值,而这个问题,最常用的方法是通过Synchronized进行控制来达到线程安全的目的。但是由于synchronized是采用的是悲观锁策略,并不是特别高效的一种解决方案。实际上,在java.util.concurrent包下的atomic包提供了一系列的操作简单,性能高效,并能保证线程安...
2018-12-19 20:32:37 817 1
转载 java并发编程 锁的可重入性
一、可重入锁:本文里面讲的是广义上的可重入锁,而不是单指JAVA下的ReentrantLock。可重入锁,也叫做递归锁,指的是同一线程 外层函数获得锁之后 ,内层函数仍然有获取该锁的代码,但不受影响。在Java内部,同一个线程调用自己类或父类中其他同步方法/块时不会阻碍该线程的执行,同一个线程对同一个对象锁是可重入的,同一个线程可以获取同一把锁多次,也就是可以多次重入。原因是Java中线程获...
2018-12-18 22:42:42 981
转载 java并发编程 自旋锁
一、自旋锁提出的背景由于在多处理器系统环境中有些资源因为其有限性,有时需要互斥访问(mutual exclusion),这时会引入锁的机制,只有获取了锁的线程才能获取资源访问。即同一时刻有且只有一个线程能获取锁,进入临界区,同一时间不能两个或两个以上线程进入临界区,当退出临界区时释放锁。设计互斥算法时总是会面临一种情况,即没有获得锁的线程怎么办?通常有2种处理方式。一种是没有获得锁的调用者就一直...
2018-12-18 22:07:43 222
转载 并发编程 CAS算法
本文讲解CAS机制,主要是因为最近准备面试题,发现这个问题在面试中出现的频率非常的高,因此把自己学习过程中的一些理解记录下来,希望能对大家也有帮助。什么是悲观锁、乐观锁?在java语言里,总有一些名词看语义跟本不明白是啥玩意儿,也就总有部分面试官拿着这样的词来忽悠面试者,以此来找优越感,其实理解清楚了,这些词也就唬不住人了。synchronized是悲观锁,这种线程一旦得到锁,其他需要锁的线程...
2018-12-17 22:44:43 876
转载 java并发编程 乐观锁和悲观锁
一、悲观锁总是假设最坏的情况,每次取数据时都认为其他线程会修改,所以都会加(悲观)锁,不加锁就会出现缓存一致性问题。一旦加锁,不同线程同时执行时,只能有一个线程执行,其他的线程在入口处等待,直到锁被释放。悲观锁在MySQL、Java有广泛的使用MySQL的读锁、写锁、行锁等Java的synchronized,ReentrantLock关键字二、乐观锁乐观锁顾名思义就是在操作时很乐观,认...
2018-12-17 20:00:17 264
转载 java并发编程 锁的分类
一、分类公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。二、公平锁/非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁。非公平锁是指多个线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线...
2018-12-17 18:45:31 159
转载 Java并发编程:volatile关键字解析
本文为转载文章:http://www.cnblogs.com/dolphin0520/p/3920373.html volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。volatile关键字虽然从字面上理解起来比较简单,但是要用好不是一...
2018-12-14 14:40:26 155
转载 java内存模型(JMM)
Java内存模型即Java Memory Model,简称JMM。JMM定义了Java 虚拟机(JVM)在计算机内存(RAM)中的工作方式。JVM是整个计算机虚拟模型,所以JMM是隶属于JVM的。如果我们要想深入了解Java并发编程,就要先理解好Java内存模型。Java内存模型定义了多线程之间共享变量的可见性以及如何在需要的时候对共享变量进行同步。原始的Java内存模型效率并不是很理想,因此J...
2018-12-12 20:58:41 183
转载 join方法介绍
首先给出结论:t.join()方法只会使调用该方法的线程进入等待池,并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。下面则是分析过程。之前对于join()方法只是了解它能够使得t.join()中的t优先执行,当t执行完后才会执行其他线程。能够使得线程之间的并行执行变成串行执行。public class TestJoin {public static void ma...
2018-12-10 17:11:12 6352 1
转载 mysql事件
1 事件简介事件(event)是MySQL在相应的时刻调用的过程式数据库对象。`一个事件可调用一次,也可周期性的启动,它由一个特定的线程来管理的,也就是所谓的“事件调度器”`。事件和触发器类似,都是在某些事情发生的时候启动。当数据库上启动一条语句的时候,触发器就启动了,而事件是根据调度事件来启动的。由于他们彼此相似,所以事件也称为临时性触发器。事件取代了原先只能由操作系统的计划任务来执行的工...
2018-12-06 16:00:10 139
转载 mysql自定义函数
一、概述1 MySQL存储过程和函数过程和函数,它们被编译后保存在数据库中,称为持久性存储模块(Persistent Stored Module,PSM),可以反复调用,运行速度快。1.1 存储过程存储过程是由过程化 SQL 语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,因此称它为存储过程,使用时只要调用即可。1.2 函数这里指自定义函数,因为是用户自己使用过程化 SQL...
2018-12-06 15:29:28 2223
原创 mysql存储过程
存储过程简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法;ps:存储过程跟触发器有点类似,都是一组SQL集,但是存储过程是主动调用的,且功能比触发器更加强大,触发器是某件事触发后自动调用;...
2018-12-05 10:50:16 272
转载 mysql触发器
MySQL包含对触发器的支持。触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行,执行触发器中定义的语句集合,满足触发条件时,由数据库自动调用执行,不需要手动调用。触发器的特性:1、有begin end体,begin end;之间的语句可以写的简单或者复杂2、什么条件会触发:I、D、U3、什么时候触发:在增删改前或者后...
2018-12-02 20:37:24 1794
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人