![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
并发
zhou554291911
这个作者很懒,什么都没留下…
展开
-
Java内存模型
“让计算机并发执行若干个运算任务”可以“更充分的利用计算机处理器的效能”。但是,绝大多数的运算任务都不可能只靠处理器“计算”完成,处理器至少要与内存交互,如读取运算数据、存储运算结果等,这个I/O操作是很难消除的。由于计算机的存储设备和处理器的运算速度有几个数量级的差距。于是加入一层高速缓存来作为内存与处理器之间的缓冲。 基于高速缓存的存储交互解决了处理器与内存的速度矛盾,但是引入了缓存一致性的问原创 2016-06-26 22:31:43 · 207 阅读 · 0 评论 -
事务
事务的基本属性原子性 事务对数据的修改,要么全都执行,要么全都不执行一致性 如:数据的类型必须正确,数据值必须在规定的范围内,等等。隔离性 不能让其他事务看到该事务的中间状态。持久性 事务完成后,对数据库的影响是永久性的。SQL的四种隔离级别Read Uncommitted:读取未提交的数据Read Committed:读取已提交数据Repeatable Read:可重复读原创 2016-07-25 10:53:42 · 114 阅读 · 0 评论 -
重入
当某个线程请求一个由其他线程持有的锁时,发出请求的线程就会阻塞。然而,由于内置的锁是可重入的,因此如果某个线程试图获得一个已经由他自己持有的锁,那么这个请求会成功。重入的一种实现是,为每个锁关联一个获取计数值和一个所有者的线程。当计数值为0时,这个锁就被认为是没有被任何线程持有。当线程请求一个未被持有的锁时,JVM将记下锁的持有者,并且将获取计数值置为1。如果同一个线程再次获取这个锁,计数值将递增,原创 2016-06-23 14:41:04 · 188 阅读 · 0 评论 -
锁
对象的内置锁和状态之间没有内在的关联。当获取与对象关联的锁时,并不能阻止其他线程访问该对象,某个线程在获得对象锁后,只能阻止其他线程获得同一个锁。一种常见的枷锁约定是,将所有可变状态都封装在对象内部,并通过对象的内置锁对所有访问可变状态的代码路径进行同步,使得在该对象上不会发生并发访问。在许多线程安全类中都使用了这种模式,例如Vector和其他的同步集合类。在这种情况下, 对象状态中的所有变量都由对原创 2016-06-23 14:57:35 · 201 阅读 · 0 评论 -
volatile
当把变量声明为volatile类型后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作与其他内存一起重排序。volatile变量不会被缓存在寄存器或者对其他处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。仅当volatile变量能简化代码的实现以及对同步策略的验证时,才应该使用。如果在验证正确性时需要队可见性进行复杂的判断,那么就不要使用volati原创 2016-06-23 15:13:02 · 204 阅读 · 0 评论 -
通过Callable和Future创建线程
import java.util.Random;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.FutureTask;public class CallableAndFuture { public static原创 2016-10-08 20:15:51 · 324 阅读 · 0 评论 -
并发编程模型
并行工作者 委派者将传入的作业分配给不同的工作者,每个工作者完成整个任务,工作者们并行运作在不同的线程上,甚至可能在不同的CPU上。优点:易理解,只需要添加工作者提高并行度。缺点: 1.竞态会出现死锁以及很多其他共享状态的并发性问题。 2.此外,线程互相等待会丢失部分并行性。 3.共享状态能够被系统中得其他线程修改。所以工作者在每次需要的时候必须重读状态,以确保每次都能访问到最新的副本,不管原创 2016-10-07 21:33:16 · 208 阅读 · 0 评论