![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程
多线程
mtsbv110
这个作者很懒,什么都没留下…
展开
-
ThreadLocal的入门代码实践及使用和实现原理
为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序,ThreadLocal并不是一个 Thread ,而是 Thread 的局部变量。查看Thread 源码可得知: /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap thre...原创 2020-05-19 11:41:24 · 202 阅读 · 0 评论 -
(一)线程池原理分析-JAVA的Collection队列BlockingQueue
队列是一种数据结构,它有两个基本操作:在队列尾部加入元素和从队列头部移除元素。在我们日常开发中,经常用来并发操作数据。非阻塞队列:以ConcurrentLinkedQueue为代表的非阻塞队列;阻塞队列:以BlockingQueue接口为代表的阻塞队列; //*********************************************************...原创 2020-04-17 16:38:38 · 213 阅读 · 0 评论 -
(七)Java线程之间的乐观锁与悲观锁
悲观锁、乐观锁乐观锁总是认为不会产生并发问题,每次去取数据的时候总认为不会有其他线程对数据进行修改,因此不会上锁,但是在更新时会判断其他线程在这之前有没有对数据进行修改,一般会使用版本号机制或CAS操作实现。version方式:一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加一。当线程A要更新数据值时,在读取数据的同时也...原创 2020-04-30 14:39:27 · 111 阅读 · 0 评论 -
(二)线程池原理分析-JAVA阻塞队列生产者线程与消费者模型
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞。试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列.1、ArrayBlockingQu...原创 2020-04-22 09:54:11 · 137 阅读 · 0 评论 -
(三)线程池原理分析-JAVA线程池原理分析
什么是线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。第一:降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二:提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。第三:提高线程的可管理性。线程是稀缺资源,如果无限制地创建,不仅会消耗系统资源,还会降低系...原创 2020-04-22 10:46:11 · 211 阅读 · 0 评论 -
(四)Java锁的深度化(可重入性+读写锁)
可重入性:从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。锁的实现:Synchronized是依赖于JVM实现的,而ReenTrantLock是JDK实现的,有什么区别,说白了就类似于操作系统来控制...原创 2020-04-29 13:06:26 · 145 阅读 · 0 评论 -
(五)Java线程之间的通信之wait notify 及Condition用法await Signal
1.因为涉及到对象锁,他们必须都放在synchronized中来使用.Wait、Notify一定要在synchronized里面进行使用。2.Wait必须暂定当前正在执行的线程,并释放资源锁,让其他线程可以有机会运行3. notify/notifyall: 唤醒因锁池中的线程,使之运行wait notify* wait notify一定要放在同步代码块中执行|同步方法中...原创 2020-04-29 14:14:38 · 415 阅读 · 0 评论 -
(六)使用多线程批量数据库千万级别业务数据与mysql数据量大时使用limit分页
在实际业务中,需要从数据库中(千万级别)的数据,批量进行处理,将数据同步到索引服务器中。核心问题:1、使用多线程查询数据库中的数据,例如我们有10个线程,每一个线程每次分页步长为10,数据一个10000条。代码如下:public class Demo18Sequence { private static int nThreads = 10; private static int...原创 2020-04-30 10:33:27 · 1119 阅读 · 0 评论