多线程+并发
sinat_28995003
这个作者很懒,什么都没留下…
展开
-
创建线程的三种方式
package com.business.thread; import java.util.concurrent.Callable; import java.util.concurrent.ExecutionException; import java.util.concurrent.FutureTask; /* *创建线程和启动线程的三种方式: *1、继承Thread *2、继承Ru...原创 2019-02-21 23:49:38 · 119 阅读 · 0 评论 -
多种多线程锁机制的实现方式与比较
Java提供了多种多线程锁机制的实现方式,常见的有: synchronized ReentrantLock Semaphore AtomicInteger等 每种机制都有优缺点与各自的适用场景,必须熟练掌握他们的特点才能在Java多线程应用开发时得心应手。 4种Java线程锁(线程同步) 1.synchronized 在Java中synchronized关键字被常用于维护...转载 2019-03-10 21:55:24 · 4785 阅读 · 0 评论 -
Java线程池的使用方式,核心运行原理、以及注意事项
线程池的处理流程 就以ThreadPoolExecutor为例,当我们把一个Runnable交给线程池去执行的时候,这个线程池处理的流程是这样的: 先判断线程池中的核心线程们是否空闲,如果空闲,就把这个新的任务指派给某一个空闲线程去执行。如果没有空闲,并且当前线程池中的核心线程数还小于 corePoolSize,那就再创建一个核心线程。 如果线程池的线程数已经达到核心线程数,并...转载 2019-03-10 21:46:34 · 149 阅读 · 0 评论 -
独享锁/共享锁+公平锁/非公平锁+乐观锁/悲观锁
乐观锁 VS 悲观锁 乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度,在Java和数据库中都有此概念对应的实际应用。 1.乐观锁 顾名思义,就是很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号等机制。 乐观锁适用于多读的应用类型,乐观锁在Java中是通过使用无锁编程来实现,最常采用的是CA...转载 2019-03-10 21:42:32 · 178 阅读 · 0 评论 -
多线程核心知识:原子性
1、原子性问题 原子操作定义:原子操作可以是一个步骤,也可以是多个操作步骤,但是其顺序不可以被打乱,也不可以被切割而只执行其中的一部分(不可中断性)。将整个操作视为一个整体是原子性的核心特征。 存在竞争条件,线程不安全,需要转变原子操作才能安全。方式:循环CAS、锁;上例只是针对一个变量的原子操作改进,我们也可以实现更大逻辑的原子操作。 解决: a、J.U.C包内的原子操作封装类 CAS...原创 2019-03-03 23:26:44 · 2726 阅读 · 0 评论 -
CountDownLatch学习
概述 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行任务。用法 new CountDownLatch(n)初始化一个计数为n的CountDow...原创 2019-02-24 15:52:48 · 183 阅读 · 0 评论 -
CyclicBarrier学习
概述 字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。 package com.business.thread; import java.util.Map; import java.ut...原创 2019-02-24 15:40:55 · 101 阅读 · 0 评论 -
Semaphore学习
Semaphore是一种在多线程环境下使用的设施,该设施负责协调各个线程,以保证它们能够正确、合理的使用公共资源的设施, 也是操作系统中用于控制进程同步互斥的量。Semaphore是一种计数信号量,用于管理一组资源,内部是基于AQS的共享模式。 它相当于给线程规定一个量从而控制允许活动的线程数。 利用Semaphore设计一个链接池。 package com.business.thread....原创 2019-02-24 15:27:41 · 139 阅读 · 0 评论 -
线程停止.interrupt
package com.business.thread; public class EndThread { private static class useThread extends Thread { public useThread(String name) { super(name); } public void run() { //isInterrupte...原创 2019-02-21 23:57:51 · 132 阅读 · 0 评论 -
守护线程
守护线程与普通线程的唯一区别是:当JVM中所有的线程都是守护线程的时候,JVM就可以退出了;如果还有一个或以上的非守护线程则不会退出。(以上是针对正常退出,调用System.exit则必定会退出) 所以setDeamon(true)的唯一意义就是告诉JVM不需要等待它退出,让JVM喜欢什么退出就退出吧,不用管它。 守护线程在没有用户线程可服务时自动离开,在Java中比较特殊的线程...原创 2019-02-21 23:54:21 · 98 阅读 · 0 评论 -
ConcurrentHashMap的实现原理(JDK1.7和JDK1.8)
哈希表 1.介绍 哈希表就是一种以 键-值(key-indexed) 存储数据的结构,我们只要输入待查找的值即key,即可查找到其对应的值。 哈希的思路很简单,如果所有的键都是整数,那么就可以使用一个简单的无序数组来实现:将键作为索引,值即为其对应的值,这样就可以快速访问任意键的值。这是对于简单的键的情况,我们将其扩展到可以处理更加复杂的类型的键。 2.链式哈希表 链式哈希表...转载 2019-03-10 22:19:00 · 870 阅读 · 0 评论