
Java并行
文章平均质量分 70
Rogera7
先后从事Android手机、Android TV开发
展开
-
Java并发之锁的优化
在高并发的环境下,激烈的锁竞争会导致程序性能下降。1、减小锁持有的时间在锁的竞争过程中,如果某个线程获得了锁,那其他线程就只有等了,如果该线程持有的时间长,那就会影响系统性能。public void synchronized function(){ otherCode1(); mutexCode(); //需要同步的代码 otherCode2();}...原创 2018-04-30 11:41:14 · 181 阅读 · 0 评论 -
Java并发之并发容器
先来一张图丫丫金: 一、Map1、不需要同步的情况HashMap TreeMap LinkedHashMap2、并发不高的情况Hashtable Collections.synchronizedMap(Map3、高并发的情况ConcurrentHashMap (分成16段,然后给各段加锁,多线程访问小分段,所以效率高些) Concur...原创 2018-04-30 01:47:30 · 693 阅读 · 0 评论 -
Java并发之线程池
线程池是为了避免频繁地创建和销毁线程而设计的,可以让创建的线程复用。1、常用线程池 ThreadPollExecutor表示一个线程池,Executors扮演着线程池工厂的角色,通过Executos可以取得一个特定功能的线程池。// 返回固定线程数量的线程池public static ExecutorService newFixedThreadPool(int nThrea...原创 2018-04-29 22:53:06 · 196 阅读 · 0 评论 -
Java并发之信号量、倒计数门闩、循环栅栏和LockSupport
1、信号量(Semaphore)信号量(Semaphore)是对锁的扩展,内部锁synchronized和重入锁ReentrantLock一次都只允许一个线程访问一个资源,而信号量却可以指定多个线程同时访问某个资源。// 指定准入数,即能同时申请多少个许可public Semaphore(int permits) // fair指定是否公平public Semaphore(int...原创 2018-04-25 00:41:50 · 1527 阅读 · 0 评论 -
马士兵高并发编程笔记四之生产者/消费者
写一个固定容量同步容器,拥有put和get方法,以及getCount方法,能够支持2个生产者线程以及10个消费者线程的阻塞调用有如下两种方法实现:1. 使用 wait 和 notify / notifyAllpublic class MyContainer1<T> { final private LinkedList<T> lists = new...原创 2018-04-07 23:44:08 · 659 阅读 · 1 评论 -
马士兵高并发编程笔记二之容器读写同步
容器读写同步,实时通知实现一个容器,提供两个方法,add,size, 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束1. volatile方法public class MyContainer2 { //添加volatile,使t2能够得到通知 volatile List lists = new Arra...原创 2018-04-07 23:43:51 · 538 阅读 · 3 评论 -
Java并发之ReentrantLock
ReentrantLock 可以替代synchrozied,可以完成同样的功能, 更灵活 手动上锁,手动释放锁主要有以下几个特点:必须手动释放锁可以指定时间,要是时间段内没有申请到,就可以自己做相应处理中断响应,锁定之后,别人可以打断还可以把锁指定为公平锁,谁等的时间长,谁就会优先得到锁Condition条件方法整理:lock():获取锁,如果已被占用,则等待lo...原创 2018-04-07 23:44:00 · 275 阅读 · 0 评论 -
线程安全的单例模式的常用四种创建方式
单例模式是常用的一种设计模式,线程安全的单例模式一般有三种写法,其中双重检查模式是最复杂的,也是不推荐的。 那有没有更好的推荐方式呢?答案是肯定的。请继续往下看。1. 不使用同步锁饱汉式public class Singleton { //直接初始化 private static Singleton instance = new Singleton();...原创 2018-04-15 17:09:24 · 606 阅读 · 0 评论 -
马士兵高并发编程笔记一之关键字概念
脏读对写业务加锁,对读业务不加锁。在写的过程中去读取,容易产生脏读问题。重入锁一个同步方法可以调用另外一个同步方法,一个线程已经拥有某个对象的锁,再次申请的时候仍然会得到该对象的锁,也就是说synchronized获得的锁是可重入的。 synchronized方法调用synchronized方法,前提是他们持有同一个对象的锁。只要锁定的是同一个对象。同一个类中synch...原创 2018-04-07 23:43:39 · 390 阅读 · 0 评论 -
Java并发之线程的常用操作
1、终止线程1. Thread.stop() Thread 类的 stop()方法,已废弃。原因:在结束线程时,会直接终止线程,并且会立即释放这个线程所持有的锁。如果写线程写入数据写到一半,强行终止,可能造成对象被写坏。 2. 使用退出标记 3. Thread.interrupt()2、线程中断线程中断并不会使线程立即退出,指示给线程发一个通知,告诉线程有人希望你退出。...原创 2018-04-24 21:51:43 · 269 阅读 · 0 评论 -
ThreadLocal 的原理分析
对于 LocalThread 的原理分析,我们从 Android 的Looper类开始分析,我们知道 Looper.myLooper() 会返回当前 Thread 的 Looper。我们就来看看 myLooper() 方法为什么可以返回当前线程的 Looper,而不是其他线程的 Looper。Looper的主要相关代码如下:public final class Looper { /...原创 2018-08-04 17:08:26 · 529 阅读 · 0 评论