Java多线程
文章平均质量分 84
rootlh;
普通开发者如果习惯于在架构师封装好的东西之上,只专注于做业务开发,那久而久之,在技术理解和成长上就会变得迟钝甚至麻木。
展开
-
Java死锁问题分析
产生死锁原因:同步嵌套两重锁嵌套,两个线程相互等待导致死锁代码:MyLock.java//生成两个要获得锁的对象public class MyLock{ Object static objA = new Object(); Object static objB = new Object();}TestDeadLoc原创 2017-08-10 15:32:34 · 218 阅读 · 0 评论 -
(新思路)生产者消费者模型2(BlockingQueue的无锁解决方法)
通过阻塞队列来模拟生产者消费者模型,和synchronized(wait和notifyAll)、lock(condition)方法相比,效率更高,因为不需要人为加锁。LinkedBlockingQueue的实现方式(无界队列,可以装到内存满为止)1public class testLinkedBlockingQueue{2 //初始化阻塞队列容器(放产品)原创 2017-09-02 23:53:50 · 636 阅读 · 0 评论 -
买票系统模拟Java高并发(ConcurrentQueue的解决方案)
需求:对于买票系统,容器中放入1000张票,开启10个线程抢票。(1)很容易想到用加锁的办法解决线程并发问题下面使用synchronized关键字解决1public class SellTicket{2 static ListString> tickets = new LinkedListString>();//1.初始化票容器3 4原创 2017-09-02 22:14:51 · 4835 阅读 · 0 评论 -
(新思路)生产者消费者模型(condition的解决方法)
需求:一个固定容量的同步容器,拥有put和get方法,还有getCount方法能够支持两个生产者和10个消费者线程的阻塞调用使用wait和notify/notifyAll实现方法一:wait和notify的方法思考:1.第8行和第21行为什么用while不用if? 生产者1和生产者2判断满了---》wait---》消费者消费原创 2017-09-01 23:33:57 · 308 阅读 · 0 评论 -
Lock接口与读写锁(lock 和 synchronized 的比较)
出现:JDK1.5实现类:ReentrantReadWriteLock.ReadLock ReentrantReadWriteLock.WriteLock主要方法:lock() unlock()使用:TestLock.javapublic class TestLock implement Runnable{ ReentrantLoc原创 2017-08-10 15:31:48 · 915 阅读 · 0 评论 -
Fork and Join(Java并发编程的思路)
原文地址 作者:Julien Ponge 译者:iDestiny资源下载:Java SE 7Sample Code(Zip)如今,多核处理器在服务器,台式机及笔记本电脑上已经很普遍了,同时也被应用在更小的设备上,比如智能手机和平板电脑。这就开启了并发编程新的潜力,因为多个线程可以在多个内核上并发执行。在应用中要实现最大性能的一个重要技术手段是将密集的任务分隔成多转载 2017-09-01 00:12:59 · 338 阅读 · 0 评论 -
CyclicBarrier核心代码dowait()方法分析(底层实现机制)
引言: 相信大家对CyclicBarrier并不陌生,当一个线程调用了CyclicBarrier的await方法时,线程阻塞,直到指定数量的线程都执行完await方法后才唤醒所有线程。那么CyclicBarrier的代码底层是如何实现的呢?它和CountDownLatch有什么区别呢? 很显然,CyclicBarrier底层是使用ReentrantLock中的get原创 2017-09-24 23:32:57 · 1072 阅读 · 0 评论 -
Java线程池ThreadPoolExecutor的execute()原理
从线程提交任务的submit方法说起 众所周知,Java的线程池底层是使用工作队列+阻塞队列来实现的。当工作队列(workQueue)任务数大于线程池的最大线程数时,任务阻塞,被放入一个阻塞队列(blockingQueue)中。 那么,在任务提交到线程开始工作这段时间里发生了什么呢? 下面是submit方法的源码,对Runn原创 2017-09-22 22:46:10 · 988 阅读 · 0 评论 -
Java线程池及其底层源码实现分析
相关类:ExecutorsExecutorServiceCallableThreadPoolFuture接口:ExecutorExecutor接口的使用:1public class TestExecutor implements Executor{2 @Override3 public void原创 2017-09-05 19:53:20 · 2030 阅读 · 0 评论 -
运用ForkJoin多线程框架实现归并排序
一、普通归并排序1public class MergeSort {23 /**4 * 原地归并排序(每次只将数组分为大和小两部分,并不是完全排序完成。需要递归)5 *6 * @param arr7 * @param lo8 * @param mid9 * @param hi10 */11 public void m原创 2017-09-05 16:51:03 · 2177 阅读 · 1 评论 -
Java分析阻塞队列
实现接口:BlockingQueue常用实现类:ArrayBlockingQueue(int)固定长度LinkedBlockingQueue不固定长度方法:入队列:add(队列满时抛异常) offer(队列满时返回false) put(队列满时阻塞不放。直到队列有空位才放入)出队列:remove(队列空时取则抛异常) poll(队列空时取则返回nul原创 2017-08-13 17:07:48 · 244 阅读 · 0 评论 -
Java线程间通信问题分析(生产者消费者模型)
线程间通信问题:不同线程间针对同一资源进行操作的问题生产者消费者模型:生产者(设置线程)和消费者(获取线程)对同一资源对象进行操作实现:一、学生类Student.javapublic class Student{ private String name; private int age; public原创 2017-08-10 15:33:46 · 235 阅读 · 0 评论 -
Java常用并发容器(concurrent包)
各种并发容器:Map HashTable HashMap ( Collections.synchronizedMap(Map map) ) ConcurrentHashMap ConcurrentSkipListMapList CopyOnWriteList 性能比较:需求:原创 2017-09-03 00:11:22 · 303 阅读 · 0 评论