
并发编程
jake don
专注科技改变生活;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
java线程协作 - 并发工具类
并发工具类CountDownLacthSemaphoreCyclicBarrierCountDownLacthCountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程执行完后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有框架服务之后执行。public class CountDownLatchExample { private final static int threadCount = 200; publi原创 2020-10-29 11:00:18 · 212 阅读 · 0 评论 -
并发编程10 - 线程池
实现线程池Executors创建线程池ExecutorService executorService = Executors.newFixedThreadPool(4);ThreadPoolExecutor构造方法// Java线程池的完整构造函数public ThreadPoolExecutor( int corePoolSize, // 线程池长期维持的线程数,即使线程...原创 2019-09-03 10:39:36 · 161 阅读 · 0 评论 -
并发编程9-并发容器
简介解决并发情况下的容器线程安全问题.譬如:Vector,HashTable,都是给予同步锁实现的.concurrent包下的类,大部分都是使用系统底层的实现,类似于native;Map/setConcurrentHashMap/ConcurrentSkipListMap这两个容器的区别主要是:ConcurrentSkipListMap是有序的.代码示例public c...原创 2019-08-01 18:27:37 · 314 阅读 · 0 评论 -
并发编程8- 并发工具ThreadLocal
简介ThreadLocal 类似于Map,设置线程需要的变量数据.ThreadLocal.set(value) 相当于 Map.put(Thread.currentThread(), value)ThreadLocal.get(),相当于Map.get(Thread.currentThread())代码示例public class Test08 { volatile stat...原创 2019-07-31 22:04:26 · 141 阅读 · 0 评论 -
并发编程 - 哲学家就餐问题
题目哲学家就餐问题是由并发处理的先驱E.W.Dijkstra所提出,主要用于阐述死锁和无饥饿概念。假设五个哲学家一生只在思考和就餐。他们围坐在一个大圆桌旁,桌上有一大盘米饭。然而只有五根可用的筷子。所有的哲学家都在思考。若某个哲学家饿了,则拿起身边的两根筷子。如果他能够拿到这两根筷子,则可以就餐。当这个哲学家吃完后,又放下自己生变的两根筷子。如果他能够拿到这两根筷子,则可以就餐。当这个哲学家吃完...原创 2019-07-24 23:24:13 · 671 阅读 · 0 评论 -
并发编程7- volatile的可见性
介绍cpu --> 读取缓存区数据 --> 内存数据 --> 硬盘数据volatile的功能是告诉os操作系统,cpu每次读取该数据时,都需要从内存中获取,而不是缓存中.这就影响性能了.代码示例public class Test07 { volatile boolean b = true; void m() { System.out....原创 2019-07-18 07:22:04 · 120 阅读 · 0 评论 -
并发编程6 -锁异常
简介当前线程调用同步方法出现异常时,自动释放锁,不影响其他线程的使用.代码示例public class Test06 { int i = 0; synchronized void m() { System.out.println(Thread.currentThread().getName() + " - start "); while(t...原创 2019-07-18 07:10:23 · 163 阅读 · 0 评论 -
并发编程5- 同步方法之继承
介绍子类同步方法覆盖父类同步方法,可以指定调用父类的同步方法.相当于锁的重入代码示例public class Test05 { public synchronized void m() { System.out.println("super class m start..."); try { TimeUnit.SECOND...原创 2019-07-18 06:47:47 · 229 阅读 · 0 评论 -
并发编程4 - 锁可重入
锁可重用同一线程,多次调用同步代码(锁对象一样),可重入.多线程不可重入.测试代码public class Test04 { synchronized void m1() { //锁this System.out.println("m1 start"); try { TimeUnit.SECONDS.sleep(2); ...原创 2019-07-13 23:06:07 · 130 阅读 · 0 评论 -
并发编程3- 多同步方法原子性问题
简介同步方法只能保证当前方法的原子性,不能保证多个业务方法之间互相访问的原子性.注意在商业开发中,多方法调用要求结果访问原子性,需要多个方法都加锁,锁定同一资源.一般来说,商业项目不考虑业务逻辑的脏读问题.只准求数据的原子性.测试代码public class Test03 { private double b = 0.0D; public synchronized ...原创 2019-07-13 22:54:09 · 226 阅读 · 0 评论 -
并发编程2 - 同步方法和非同步方法
同步方法只影响其他线程调用同一同步方法,不影响调用其他非同步方法,或其他锁资源的同步方法.测试代码public class Test02 { Object o = new Object(); public synchronized void m1() { System.out.println("public synchronized void m1 star...原创 2019-07-13 22:30:09 · 551 阅读 · 0 评论 -
并发编程1-同步方法 - 保持原子性
synchronized加锁: 实现同步方法## 测试代码public class Test01 implements Runnable { private int count = 0; @Override public synchronized void run() { System.out.println(Thread.currentThread...原创 2019-07-13 22:01:31 · 165 阅读 · 0 评论