![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程并发
文章平均质量分 87
chenzehe
这个作者很懒,什么都没留下…
展开
-
Java多线程基础
Java编写的程序都运行在 Java 虚拟机 (JVM) 中,在 JVM 的内部,程序的多任务是通过多线程来实现的。每用 java 命令启动一个 java 应用程序,就会启动一个 JVM 进程。在同一个 JVM 进程中,有且只有一个进程,就是它自己。在这个 JVM 环境中,所有程序代码的运行都是以线程来运行。 对于一个进程中的多个线程来说,多个线程共享进程的内存块,当...原创 2012-06-04 20:57:01 · 70 阅读 · 0 评论 -
同步工具类之Semaphore 信号量
Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用了。另外等待的5个人...原创 2013-01-10 17:24:34 · 111 阅读 · 0 评论 -
同步工具类之CountDownLatch倒数计数器
CountDownLatch类在java.util.concurrent包下,一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数到达0时,则所有等待者或单个等待者开始执行。这直接通过代码来说明CountDownLatch的作用,可以实现一个人(也可以是多个人...原创 2013-01-10 20:59:51 · 163 阅读 · 0 评论 -
同步工具类之CyclicBarrier循环的barrier
CyclicBarrier在java.util.concurrent包下,是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。Cyclic...原创 2013-01-11 15:39:40 · 114 阅读 · 0 评论 -
同步工具类之Exchanger
Exchanger<V>,java.util.concurrent包下,用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据,V - 可以交换的对象类型。构造方法public Exchanger()创建一个新的 Exchanger。 方法摘要 V e...原创 2013-01-11 17:11:12 · 98 阅读 · 0 评论 -
Executor框架和线程池
简介 在JDK5后主要提供的多线程处理都在java.util.concurrent包中,多线程的主要抽象不是Thread,而是Executor,Executor为接口,定义在java.util.concurrent包下,只定义了一个方法:public interface Executor { void execute(Runnable command);}它提供...原创 2013-01-15 21:08:25 · 122 阅读 · 0 评论 -
线程池的使用
线程池实现类ThreadPoolExecutor ExecutorService接口扩展了Executor接口,添加了一些用于生命周期的管理方法,ThreadPoolExecutor继承了AbstractExecutorService,而AbstractExecutorService又实现了ExecutorService接口。 ThreadPoolExecutor的通...原创 2013-01-17 18:23:17 · 75 阅读 · 0 评论 -
携带结果的任务Callable和Future
Executor框架使用Runnable作为基本的任务表示形式,但是Runnable有一定的局限性:不能返回一个值或抛出一个受检查的异常。实际中很多任务都是存在延迟的,如执行数据库查询、从网络上获取资源或执行复杂计算先进,对于这样的任务,Callable是一种更好的抽象:它认为入口(call)将返回一个值并并可能抛出一个异常。Callable 定义:package j...原创 2013-01-21 21:37:38 · 96 阅读 · 0 评论 -
Java 并发集合CopyOnWriteArrayList
1、Java在JDK1.5之前基本上对所有集合都实现了线程同步版本synchronized*,用集合工具类Collections即可得到,如下都为Collections中的方法:static <T> Collections<T> synchronizedCollection(Collection<T> c) 返回指定 col...原创 2013-01-30 21:22:37 · 173 阅读 · 0 评论 -
Java读取文件中单词进行排序并写到另一个文件中
支持 http://ifeve.com/tao-code-match-1/ ,用fork-join来实现读取一个文件中的单词(使用BufferedReader按行读取),排序(使用fork-join框架快速排序),写到另一个文件中(使用BufferedWriter進行寫入)代码在github上:https://github.com/chenzehe/wordsorter-javaSo...2013-12-04 11:12:13 · 848 阅读 · 0 评论 -
Java 并发集合ConcurrentHashMap
ConcurrentHashMap是JDK1.5并发包中提供的线程安全的HashMap的实现,其包结构关系如下:public class ConcurrentHashMap<K, V> extends AbstractMap<K, V> implements ConcurrentMap<K, V>, Serializable {}...原创 2013-02-01 18:00:21 · 79 阅读 · 0 评论 -
阻塞队列BlockingQueue
1、队列Queue介绍Queue是JDK1.5引入的接口,继承Collection接口,是Collection框架的新成员,是种先进先出(FIFO)的队列。public interface Queue<E> extends Collection<E>{ boolean add(E e); boolean offer(E e); E ...原创 2013-02-04 15:16:44 · 74 阅读 · 0 评论 -
Java锁机制
内置锁 Java提供了一种内置的锁机制来支持原子性:同步代码块(synchronized 关键字 ),同步代码块包含两部分:一个作为锁的对象的引用,一个作为由这个锁保护的代码块。synchronized { //代码块} 每个Java对象都可以用做一个实现同步的锁,这些锁被秒为内置锁(Intrinsic Lock)或监视锁(Monitor Loc...原创 2013-01-09 20:26:11 · 209 阅读 · 0 评论 -
非阻塞同步机制与CAS操作
锁的劣势 Java在JDK1.5之前都是靠synchronized关键字保证同步的,这种通过使用一致的锁定协议来协调对共享状态的访问,可以确保无论哪个线程持有守护变量的锁,都采用独占的方式来访问这些变量,如果出现多个线程同时访问锁,那第一些线线程将被挂起,当线程恢复执行时,必须等待其它线程执行完他们的时间片以后才能被调度执行,在挂起和恢复执行过程中存在着很大的开销。锁还存在着其它一些...原创 2013-01-05 21:20:22 · 99 阅读 · 0 评论 -
Daemon Thread 守护线程
在Java中有两类线程:用户线程 (User Thread)、守护线程 (Daemon Thread)。所谓守护 线程,是指在程序运行的时候在后台提供一种通用服务的线程,比如垃圾回收线程就是一个很称职的守护者,并且这种线程并不属于程序中不可或缺的部分。因 此,当所有的非守护线程结束时,程序也就终止了,同时会杀死进程中的所有守护线程。反过来说,只要任何非守护线程还在运行,程序就不会终止。...原创 2012-06-04 21:05:55 · 68 阅读 · 0 评论 -
面试题——在一个文本里有N多个数据,使用多线程最快求和
思路:把所有数据分组,每组使用一个线程去计算结果,计算完后再把结果汇总具体实现如下:1、用数据模拟文本里的数据2、声明一个线程池和实现一个可返回结果的Callable接口3、把果返回结果Future放到CopyOnWriteArrayList中用于结果集计算4、此算法的缺点有待改进的地方是结果汇总时是被动去检测,而不是某个结果计算完成后主动去汇总,既然是分段计算,如果数据量...原创 2013-03-08 13:51:57 · 416 阅读 · 0 评论 -
BoneCP源码——BoneCP中使用的多线程
1、asyncExecutor 可缓存线程池,用于异步的创建一个Connection对象,返回Future类型对象 /** Executor service for obtaining a connection in an asynchronous fashion. */ private ExecutorService asyncExecutor; /** * Construct...原创 2013-03-16 17:53:10 · 243 阅读 · 0 评论 -
BoneCP源码——BoneCP中使用的第三方包 jsr166y、 LinkedTransferQueue队列、fork-join框架...
BoneCP主要使用了下面几种第三方包:1、Google Guava library The Guava project contains several of Google's core libraries that we rely on in our Java-based projects: collections, caching, primitives support...原创 2013-03-18 19:06:02 · 350 阅读 · 0 评论 -
Java多线程synchronized关键字
Java中使用synchronized关键字来加锁达到同步的目的,synchronized可以在作用在方法上,也可以作用在代码块上。Java中的每一个对象都可以作为锁,但是基本数量类型不行,如int、float。 synchronized同步非静态方法 非静态同步方法,锁是当前对象实例,如下代码Info类中set()和get()方法都加上synchronized关...原创 2012-12-04 19:49:04 · 112 阅读 · 0 评论 -
Java多线程volatile关键字
Java提供了一种弱同步机制,即volatile变量,用来确保将变量的更新操作通知到其它线程,它是比synchronized关键字更轻的一种同步机制。在当前大多数处理器架构上,读取volatile变量只比读取非volatile变量的开销略高一些。 当一个变量被定义为volatile后,它具备两种特性,第一是保证此变量对所有线程的可见性,指当一个线程修改了这个变量的值,新值对...原创 2012-12-04 21:08:44 · 94 阅读 · 0 评论 -
Java多线程wait、notify、join、sleep、yiled
1、wait public final void wait(long timeout) throws InterruptedException 此方法为Object类的方法,在其他线程调用此对象的 notify() 方法或 notifyAll() 方法,或者超过指定的时间量前,导致当前线程等待。当前线程必须拥有此对象监视器,也就是当前线程必须要有此对...原创 2012-12-05 18:37:38 · 232 阅读 · 0 评论 -
Java线程的生命周期
JVM把线程分为6种状态,分别是新建(New)、运行(Runnable)、无期限等待(Waiting)、一定时间的等待(Timed Waiting)、阻塞(Blocked)、结束退出(Terminated),如下图:新建(New):线程创建后还未启动 运行(Runnable):包括了Ready和Running两种状态,也就是说此状态的线程可能在等待CPU执行权,也可...原创 2012-12-05 21:55:27 · 93 阅读 · 0 评论 -
Java多线程ThreadLocal类
一、ThreadLocal概述JDK API 写道: 该类在java.lang包里,提供了线程局部 (thread-local) 变量。这些变量不同于它们的普通对应物,因为访问某个变量(通过其 get 或 set 方法)的每个线程都有自己的局部变量,它独立于变量的初始化副本。ThreadLocal 实例通常是类中的 private static 字段,它们希望将状态...原创 2012-12-06 19:48:11 · 95 阅读 · 0 评论 -
Java并发包java.util.concurrent简介
JDK从1.5在多线程编程中提供了并发包java.util.concurrent,此包包括了几个小的、已标准化的可扩展框架,以及一些提供有用功能的类。主要代码由大牛Doug Lea完成,其实是在jdk1.4时代,由于java语言内置对多线程编程的支持比较基础和有限,所以他写了这个,因为实在太过于优秀,所以被加入到jdk之中。 concurrent包基本有3个package组成 ...原创 2012-12-06 19:53:48 · 253 阅读 · 0 评论 -
java.util.concurrent.atomic原子操作类包
这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,具有排他性,即当某个线程进入方法,执行其中的指令时,不会被其他线程打断,而别的线程就像自旋锁一样,一直等到该方法执行完成,才由JVM从等待队列中选择一个另一个线程进入,这只是一种逻辑上的理解。实际上是借助硬件的相关指令来实现的,不会阻塞线程(或者说只是在硬件级别上阻塞了)。可以...原创 2013-01-04 20:04:53 · 250 阅读 · 0 评论 -
面试题——在多线程环境下如何保证一个List集合中的元素不超过15个
这是有一次去面试被问到的,当时只知道用synchronized来保证同步,但面试官说除了此方式的其它实现,现在写下它的各种实现:1、JDK1.5之前的内置锁synchronized实现 模仿JDK1.5之前同步集合SynchronizedList的实现,内部使用synchronized对一个对一个List的封装,如下代码:/** * @description * * ...原创 2013-02-22 19:16:40 · 569 阅读 · 0 评论