Java并发编程
文章平均质量分 88
Java并发编程实践,Java util.concurrent包下类的使用
记忆力不好
这个作者很懒,什么都没留下…
展开
-
Java并发编程-并发队列(ConcurrentLinkedQueue)的原理分析
在上一篇文章中我们学习了阻塞队列(BlockingQueue)的实现原理。我们知道要实现一个线程安全的队列有两种实现方式一种是使用阻塞算法,另一种是使用非阻塞算法。阻塞队列就是通过使用加锁的阻塞算法实现的,而非阻塞的实现方式则可以使用循环CAS(如原子类Atomic)的方式来实现,本文我们一起如何使用非阻塞的方式来实现线程安全队列ConcurrentLinkedQueue的。下面文章转原创 2016-06-13 20:58:54 · 10799 阅读 · 0 评论 -
Java并发编程-阻塞队列(BlockingQueue)的实现原理
阻塞队列 (BlockingQueue)是Java util.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。并发包下很多高级同步类的实现都是基于BlockingQueue实现的。BlockingQueue 的操作方法原创 2016-06-13 19:37:30 · 71585 阅读 · 6 评论 -
Java并发编程-并发编程知识点总结
1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。程序员可以通过它进行多处理器编程,你可以使用多线程对运算密集型任务提速。比如,如果一个线程完成一个任务要100毫秒,那么用十个线程完成改任务只需10毫秒。J2) 线程和进程有什么区别? 线程是进程的子集,一个进程可以有很多线程,每条线程并行执行不同的任务。不同的进程转载 2016-06-11 17:39:53 · 6628 阅读 · 5 评论 -
Java并发编程-Fork/Join框架同步与异常
前面学习了Executor框架,它将任务的创建和执行进行了分离,通过这个框架,只需要创建Runnable对象,把Runnable对象交给Executor执行器,Executor执行器在负者执行这些任务的线程创建,管理以及线程的结果。JDK1.7 Concurrent包提供了一个新的Fork/join框架。是ExecutorService接口的另一种实现。Fork/Join框架介绍Fork/join原创 2016-06-11 17:19:54 · 2578 阅读 · 0 评论 -
Java并发编程-Executor框架之CompletionService
在前面我们已经学习过Executor框架之Callable和Future接口,我们知道利用list保存submit的callable任务所返回的Future对象。再在主线程中遍历这个list并调用Future的get()方法取到任务的返回值进行处理。Java通过另一个类CompletionService进行改进。两者最主要的区别在于submit的任务不一定是按照加入自己维护的list顺序完成的。从l原创 2016-06-08 21:02:48 · 4414 阅读 · 0 评论 -
Java并发编程-Executor框架之ScheduledThreadPoolExecutor
ScheduledThreadPoolExecutor是线程池执行器的一种,继承ThreadPoolExecutor,在ThreadPoolExecutor的基础上添加了按计划执行线程的功能,如延迟执行、定时执行、周期性执行。还不了解Exector可以先查看Java并发编程-Executor框架: http://blog.csdn.net/chenchaofuck1/article/detail原创 2016-06-08 16:21:13 · 3902 阅读 · 0 评论 -
Java并发编程-一个线程的内心独白
最近正在学习Java并发编程实践,无意中发现了这边文章,特别的有意思,而且知识点也很多,忍不住分享给大家!我是一个线程, 我一出生就被编了个号: 0x3704, 然后被领到一个昏暗的屋子里, 这里我发现了很多和我一模一样的同伴。 我身边的同伴0x6900 待的时间比较长, 他带着沧桑的口气对我说: 我们线程的宿命就是处理包裹。 把包裹处理完以后还得马上回到这里,否则可能转载 2016-06-08 13:49:43 · 3017 阅读 · 4 评论 -
Java并发编程-Executor框架
我们在并发编程创建线程时,常常是创建一些Runnable对象,然后创建对应的Thread对象执行它们,但是如果程序需要并发执行大量的任务时,需要为每个任务都创建一个Thread,进行管理,这将会影响程序的执行效率,并且创建线程过多将会使系统负载过重。Java 5之后通过了一套Executor框架能够解决这些问题,能够分解任务的创建和执行过程。该框架包括Executor,ExecutorService原创 2016-06-07 19:56:50 · 5665 阅读 · 0 评论 -
Java并发编程-Executor框架之Callable和Future接口
在上一篇文章中我们已经了解了Executor框架进行线程管理,这篇文章将学习Executor框架的另一个特性,我们知道执行Runnable任务是没有返回值得,但Executor可以运行并发任务并获得返回值,Concurrent包提供下面两个接口实现这个功能:Callable接口:这个接口声明call(),类似于Runnable的run(),可以在这个方法里实现任务的具体逻辑操作。Callable是原创 2016-06-07 20:58:57 · 6434 阅读 · 0 评论 -
Java并发编程-同步辅助类之Exchanger
Exchanger是自jdk1.5起开始提供的工具套件,一般用于两个工作线程之间交换数据。在本文中我将采取由浅入深的方式来介绍分析这个工具类。首先我们来看看官方的api文档中的叙述: A synchronization point at which threads can pair and swap elements within pairs. Each thread presents some转载 2016-06-07 15:29:30 · 1738 阅读 · 0 评论 -
Java并发编程-同步辅助类之Phaser
在前面已经学习过 Java并发编程-同步辅助类之CountDownLatch Java并发编程-同步辅助类之CyclicBarrier 这篇文章介绍另一个辅助类Phaser,它是J在Dk 1.7才添加的新的功能,它可以实现和CountDownLatch/CyclicBarrier类似的功能,但Phaser的功能更多,更加的灵活,它支持任务在多个点都进行同步,支持动态调整注册任务的数量。当然你也原创 2016-06-07 14:37:36 · 2873 阅读 · 1 评论 -
Java并发编程-同步辅助类之CyclicBarrier
在上一篇文章中我们介绍了同步辅助类CountDownLatch,在Java Concurrent包下还有另一个同步辅助类CyclicBarrier与CountDownLatch非常类似,它也允许多个线程在莫个点进行同步,但CyclicBarrier类更加强大。 操作方法提供两种构造函数带Runnable的 CyclicBarrier(int parties, Runnable barrierAc原创 2016-06-06 21:48:12 · 2136 阅读 · 0 评论 -
Java并发编程-同步辅助类之CountDownLatch
CountDownLatch是Java Concurrent包下提供的同步辅助类。在完成一组正在其他线程中执行的操作之前,它允许线程一直等待。和Semaphore类似,它使用一个整数进行初始化,Semaphore中的计算表示可以同步访问共享数据的线程数,CountDownLatch中的计算表示线程要等待的操作数数目。操作方法 - 构造函数CountDownLatch(int count),co转载 2016-06-06 17:03:35 · 2452 阅读 · 0 评论 -
Java并发编程-同步辅助类之Semaphore
信号量Semaphore是一个计数信号量,用来保护一个或多个共享资源的访问,是Java Concurrent包下提供的另一种同步方式。Semaphore可以控制某个资源可被同时访问的个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。比如在Windows下可以设置共享文件的最大客户端访问个数。 Semaphore实现的功能就类似厕所有5个坑,假如有10原创 2016-06-06 15:58:47 · 1686 阅读 · 0 评论 -
Java并行编程-lock中使用多条件condition(生产者消费者模式实例)
Java 并发包下的提供Lock,Lock相对于Synchronized可以更好的解决线程同步问题,更加的灵活和高效,并且ReadWriteLock锁还能实现读、写的分离。但线程间仅仅互斥是不够的,还需要通信,本篇的内容是基于上篇之上,使用Lock如何处理线程通信。阻塞队列(BlockingQueue)就是使用condition的和lock实现的。可以查看:Java并发编程-阻塞队列(Blockin原创 2016-06-05 23:37:27 · 25902 阅读 · 7 评论 -
Java并发编程-ThreadFactory接口
ThreadFactory是用来实现创建线程的工厂模式接口,其实它只有一个方法Thread newThread(Runnable r),所以这个接口没多大用,可以自己编写新接口。工厂模式是最常用的模式之一,在创建线程的时候,我们当然也能使用工厂模式来生产Thread,这样就能替代默认的new THread,而且在自定义工厂里面,我们能创建自定义化的Thread,并且计数,或则限制创建Thread的数原创 2016-06-05 15:44:26 · 18429 阅读 · 0 评论 -
Java并发编程-线程局部变量(ThreadLocal)
ThreadLocal与线程成员变量还有区别,ThreadLocal该类提供了线程局部变量。这个局部变量与一般的成员变量不一样,ThreadLocal的变量在被多个线程使用时候,每个线程只能拿到该变量的一个副本,这是Java API中的描述,通过阅读API源码,发现并非副本,副本什么概念?克隆品? 或者是别的样子,太模糊。 准确的说,应该是ThreadLocal类型的变量内部的注册转载 2016-06-05 14:45:24 · 2476 阅读 · 0 评论 -
Java并发编程-interrupt()方法
在java中,开启一个多线程是很简单的,只需要new一个runnable就可以了,但是要停止一个线程,却不能简单的使用Thread.stop()方法。首先来说说java中的中断机制,Java中断机制是一种协作机制,也就是说通过中断并不能直接终止另一个线程,而需要被中断的线程自己处理中断。当调用interrupt()方法的时候,只是设置了要中断线程的中断状态,而此时被中断的线程的可以通过isInter转载 2016-06-02 22:29:11 · 1109 阅读 · 0 评论 -
java locks包下提供的锁。
Java 并发包concurrent包下主要提供lock和ReadWrite两种接口,提供两种类型的锁。1.ReentrantLock类 由于ReentrantLock是java.util.concurrent包下提供的一套互斥锁,相比Synchronized,ReentrantLock类提供了一些高级功能,主要有以下3项:等待可中断 持有锁的线程长期不释放的时候,正在等待的原创 2016-04-07 17:16:53 · 2143 阅读 · 0 评论 -
java的两种同步方式, Synchronized与ReentrantLock的区别
java在编写多线程程序时,为了保证线程安全,需要同步,经常用到两种同步方式就是Synchronized和重入锁ReentrantLock。相似点:这两种同步方式有很多相似之处,它们都是加锁方式同步,而且都是阻塞式的同步,也就是说当如果一个线程获得了对象锁,进入了同步块,其他访问该同步块的线程都必须阻塞在同步块外面等待,而进行线程阻塞和唤醒的代价是比较高的(操作系统在用户态与内核态之间来回原创 2016-04-02 19:37:22 · 28776 阅读 · 3 评论