- 博客(9)
- 资源 (1)
- 收藏
- 关注
原创 Java并发-顺序一致性模型
顺序一致性模型顺序一致性内存模型有两大特性 1)一个线程中的所有操作必须按照程序的顺序来执行。 2)(不管程序是否同步)所有线程都只能看到一个单一的操作执行顺序。在顺序一致性内存模型中,每个操作都必须原子执行且立刻对所有线程可见。 在概念上,顺序一致性模型有一个单一的全局内存,这个内存通过一个左右摆动的开关可以连接到任意一个线程,同时每一个线程必须按照程序的顺序来执行内存读/写操作。...
2018-06-24 19:37:36 1848
原创 Java并发-happens-before,重排序
happens-before规则程序顺序规则:一个线程中的每个操作,happens-before于该线程中的任一后续操作 监视器锁规则:对一个锁的解锁,happens-before于随后对这个锁的加锁 volatile变量规则:对一个volatile域的写,happens-before于任一后续对这个volatile域的读 传递性:如果A happens-before B,且B happ...
2018-06-24 15:44:40 356
原创 Java并发-内存屏障
现代的处理器使用写缓冲区临时保存内存写入的数据。写缓冲区可以保证指令流水线持续运行,他可以避免由于处理器停顿下来等待内存写入数据而产生的延迟。同时,通过以批处理的方式刷新写缓冲区,以及合并写缓冲区中对同一个内存地址的多次写,减少对内存总线的占用。每个处理去上的写缓冲区,仅仅对它所在的处理器可见。这个特性会对内存操作的执行顺序产生重要的影响:处理器对内存的读/写操作的执行顺序,不一定与内存实际发生的...
2018-06-23 16:35:15 364
原创 Java并发-Java内存模型
线程之间的通信与同步通信是指线程之间以何种机制来交换信息,线程之间的通信机制有两种:共享内存和消息传递。 在共享内存的并发模型里,线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式通信。 在消息传递的并发模型里,线程之间没有公共状态,线程之间必须通过发送消息来显式进行通信。同步是指程序中用于控制不同线程间操作发生相对顺序的机制。 在共享内存并发模型里,同步时显式进行的。程...
2018-06-23 14:50:03 271
原创 Java并发-synchronized与原子操作的实现原理
synchronizedJava中的每一个对象都可以作为锁 1.对于普通同步方法,锁是当前实例对象 2.对于静态同步方法,锁是当前类的Class对象 3.对于同步方法块,锁是Synchronized括号里配置的对象 当一个线程驶入访问同步块时,它首先必须得到锁。退出或者抛出异常时必须释放锁。实现原理JVM基于进入和退出Monitor对象来实现方法同步和代码块同步,但实现细节不一...
2018-06-23 14:22:37 1946
转载 JavaWeb-POST与GET
POST与GET区别GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长...
2018-06-21 19:19:20 369
原创 Java并发-活跃性问题
饥饿当线程由于无法访问它所需要的资源而不能继续执行时,就发生了“饥饿“。 引发饥饿的最常见资源就是CPU时钟周期。(无限循环,或者无限制地等待某个资源) Thread API中定义的线程优先级只是作为线程调度的参考,定义了10个优先级,JVM根据需要将它们映射到操作系统的调度优先级。这种映射是与特定平台相关的,可能某个操作系统中两个不同的Java优先级可能被映射到同一个优先级。 经常可能...
2018-06-19 20:54:32 616
原创 Java并发-synchronized与ReentrantLock之间的选择
可重入ReentrantLock和synchronized其实都是可重入的锁。两者都是同一个线程每进入一次,锁的计数器都自增1,所以要等到锁的计数器下降为0时才能释放锁。实现synchronized是依赖JVM实现的,而ReentrantLock是JDK实现的性能synchronized优化以前,性能比ReentrantLock差很多。自从Synchronized引入了...
2018-06-19 19:50:50 517
原创 Java并发-ThreadLocal
ThreadLocal与线程同步机制的区别线程同步机制是共享同一个变量 ThreadLocal是为每个线程创建一个变量副本ThreadLocalThreadLocal内部还有一个静态内部类ThreadLocalMap,该内部类才是实现线程隔离机制的关键,get()、set()、remove()都是基于该内部类操作。ThreadLocalMap提供了一种用键值对方式存储每一个线程的...
2018-06-17 20:22:31 159
redis可视化工具
2018-04-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人