02_多线程/高并发
青年道士
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
通过ThreadLoad实现线程范围内的共享变量
线程共享变量可能出现的问题原创 2015-11-30 21:00:42 · 2735 阅读 · 1 评论 -
线程池的基本使用
对线程池的理解 一个池子中有多个线程,可以放入多个任务,任务被不确定的线程执行。 Executors 工具类 1、创建固定数目的线程池 2、缓存线程池:线程数是可伸缩的,任务多的时候,会创建新的线程来执行任务,任务完成后,空闲的线程会被回收。这样若请求过多,可能造成创建大量线程,造成服务器性能下降,甚至宕机。 3、单线程池:1个线程,这个线程死了,会有替补线程接替执行任务。原创 2015-12-01 02:54:04 · 420 阅读 · 0 评论 -
Callable&&Future的基本使用
ExecutorService的submit ExecutorService的submit方法可以接收一个Callable对象,并且返回一个Future 。 public interface Callable { /** * Computes a result, or throws an exception if unable to do so. * *原创 2015-12-01 14:56:49 · 435 阅读 · 0 评论 -
读写锁
为什么读写要互斥,读的时候不能写,写的时候不能读? 举个例子,用户A正在读的时候,用户B对数据进行了写操作,就会出现A读到的数据不准确。A在写的时候,B去读,则读到的数据也是不准确的。所以读和写要互斥。读写锁的特点1、读锁与写锁互斥。 2、读锁之间不互斥。 3、写锁与写锁互斥。读写锁分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这些特性由jvm底层控制,代码中加上相应的锁即可。使用的时候注意原创 2015-12-01 23:32:06 · 1050 阅读 · 0 评论 -
Lock的基本使用
Lock的实现类ReentrantLockReentrant:折返 注意:不同线程中需要同步的代码需要要持有同一个锁,才能实现同步的效果。在以下的代码中,使用了传入统一Outputer对象的方法,使其具有同一个锁。package cn.iktz.thread.demo;import java.util.concurrent.locks.Lock; import java.util.concurre原创 2015-12-01 21:33:40 · 446 阅读 · 0 评论 -
ArrayBlockingQueue阻塞队列的使用示例
和BoundQueue(见上一篇文章线程间的通信Condition)中代码实现的功能是相似的。package cn.iktz.thread.demo;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;public class BlockingQueueTest {原创 2015-12-03 21:09:10 · 1070 阅读 · 0 评论 -
线程之间的通信Condition
Condition 对象的获取 Lock lock = new ReentrantLock(); Condition condition = lock.newCondition();condition.await();// 当前线程等待 condition.signal();// 给其他线程发信号,唤醒其他线程文档中通过Condition实现的可阻塞的队列例子分析Bounded:有界限的 pa原创 2015-12-03 20:54:13 · 469 阅读 · 0 评论 -
同步集合
HashSet、HashMap、ArrayList这些都是线程不安全的,在多线程并发操作的时候,会使其中的数据发生混乱。 所以多线程的时候要使用api提供的同步集合 ConcurrentHashMap ConcurrentHashMap, ConcurrentSkipListMap, ConcurrentSkipListSet, CopyOnWriteArraySet.原创 2015-12-03 21:20:31 · 348 阅读 · 0 评论
分享