上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页
摘要: 在java并发编程中,会出现++,--等操作,但是这些不是原子性操作,这在线程安全上面就会出现相应的问题。因此java提供了相应类的原子性操作类。 1.AtomicInteger 可以用原子方式更新的 int 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 阅读全文
posted @ 2018-12-27 10:46 qjm201000 阅读(205) 评论(0) 推荐(0) 编辑
摘要: 类AtomicBoolean 可以用原子方式更新的 boolean 值。有关原子变量属性的描述,请参阅 java.util.concurrent.atomic 包规范。AtomicBoolean 可用在应用程序中(如以原子方式更新的标志),但不能用于替换 Boolean。 2.构造函数 1.Atom 阅读全文
posted @ 2018-12-27 10:45 qjm201000 阅读(303) 评论(0) 推荐(0) 编辑
摘要: 几个线程都申请读锁,都能获取: 结果: 几个线程,一个线程抢占了读锁,别的线程想用写锁时,需要等待读锁完成才行 结果: 源码地址:https://github.com/qjm201000/concurrent_reentrantReadWriteLock.git 这样就大大提升了读操作的效率。 不过 阅读全文
posted @ 2018-12-26 11:00 qjm201000 阅读(195) 评论(0) 推荐(0) 编辑
摘要: ReadWriteLock也是一个接口,在它里面只定义了两个方法: 一个用来获取读锁,一个用来获取写锁。也就是说将文件的读写操作分开,分成2个锁来分配给线程,从而使得多个线程可以同时进行读操作。 它只有一个实现类,ReentrantReadWriteLock。 阅读全文
posted @ 2018-12-26 10:59 qjm201000 阅读(123) 评论(0) 推荐(0) 编辑
摘要: 可重入和不可重入的概念是这样的:当一个线程获得了当前实例的锁,并进入方法A,这个线程在没有释放这把锁的时候,能否再次进入方法A呢? 可重入锁:可以再次进入方法A,就是说在释放锁前此线程可以再次进入方法A(方法A递归)。 不可重入锁(自旋锁):不可以再次进入方法A,也就是说获得锁进入方法A是此线程在释 阅读全文
posted @ 2018-12-25 17:51 qjm201000 阅读(329) 评论(0) 推荐(0) 编辑
摘要: 既然都可以通过synchronized来实现同步访问了,那么为什么还需要提供Lock?这个问题将在下面进行阐述。本文先从synchronized的缺陷讲起,然后再讲述java.util.concurrent.locks包下常用的有哪些类和接口,最后讨论以下一些关于锁的概念方面的东西 一.synchr 阅读全文
posted @ 2018-12-25 16:11 qjm201000 阅读(456) 评论(0) 推荐(0) 编辑
摘要: 有几种不同的方式来将任务委托给 ExecutorService 去执行: execute(Runnable) submit(Runnable) submit(Callable) invokeAny(…) invokeAll(…) execute(Runnable) execute(Runnable) 阅读全文
posted @ 2018-12-21 16:20 qjm201000 阅读(226) 评论(0) 推荐(0) 编辑
摘要: 1、new Thread的弊端 执行一个异步任务你还只是如下new Thread吗? 那你就out太多了,new Thread的弊端如下:a. 每次new Thread新建对象性能差。b. 线程缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统资源导致死机或oom。c. 缺乏更多功能 阅读全文
posted @ 2018-12-21 15:57 qjm201000 阅读(322) 评论(0) 推荐(0) 编辑
摘要: java.util.concurrent包中的Exchanger类可用于两个线程之间交换信息。可简单地将Exchanger对象理解为一个包含两个格子的容器,通过exchanger方法可以向两个格子中填充信息。当两个格子中的均被填充时,该对象会自动将两个格子的信息交换,然后返回给线程,从而实现两个线程 阅读全文
posted @ 2018-12-20 21:47 qjm201000 阅读(256) 评论(0) 推荐(0) 编辑
摘要: Semaphore翻译成字面意思为 信号量,Semaphore可以控同时访问的线程个数,通过 acquire() 获取一个许可,如果没有就等待,而 release() 释放一个许可。 acquire()用来获取一个许可,若无许可能够获得,则会一直等待,直到获得许可。 release()用来释放许可。 阅读全文
posted @ 2018-12-20 16:40 qjm201000 阅读(167) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页