1. JMM的介绍 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程只有这么简单,那我们就不必费劲周折的去学习它了。在多线程中稍微不注意就会出现线程安全问题,那么什么是线程安全问题?我的认识是,在多线程下代码执行的结果与预期正确的结果不一致,该代码就是 ...
分类:
移动开发 时间:
2019-02-08 20:18:41
阅读次数:
197
1. ThreadLocal的简介 在多线程编程中通常解决线程安全的问题我们会利用synchronzed或者lock控制线程对临界区资源的同步顺序从而解决线程安全的问题,但是这种加锁的方式会让未获取到锁的线程进行阻塞等待,很显然这种方式的时间效率并不是很好。线程安全问题的核心在于多个线程会对同一个临 ...
分类:
其他好文 时间:
2019-02-08 20:10:36
阅读次数:
181
线程安全问题: 在添加时候并没有进行安全考虑,枷锁 所以是线程不安全的,接下来进行代码测试; 运行三次: 所以hashmap是线程不安全的,那么我们在代码里面怎么还要用呢,我们只是局部使用,并没有在多线程环境下使用,所以并不会出现线程安全问题 ...
分类:
其他好文 时间:
2019-01-30 16:03:23
阅读次数:
89
先说结论:servlet不是线程安全的。 servlet运行过程 Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后: ①Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第④步,否则,执行第②步。 ②装载并创建该Servle... ...
分类:
编程语言 时间:
2019-01-28 23:48:04
阅读次数:
216
ThreadLocal线程局部变量,当多线程需要多次使用同一个对象,并且需要该对象具有相同初始化值的时候最适合使用ThreadLocal。 ThreadLocal在每个线程中对该对象会创建一个副本,即每个线程内部都会有一个该对象,且在线程内部任何地方都可以使用,线程之间互不影响,不存在线程安全问题。 ...
分类:
其他好文 时间:
2019-01-25 23:23:33
阅读次数:
199
前言 本来是想写两个线程,线程1输出1-98的奇数,线程2输出1-98的偶数,交替执行,在测试的时候发现线程安全问题,之后又引入到java内存模型,下面是几个demo。 1.版本1 版本1很多次结果输出正常,偶尔会出现线程停留在中间某步不继续执行。 2.版本2, 在版本1的基础上给其中一个线程加上s ...
分类:
编程语言 时间:
2019-01-14 01:05:44
阅读次数:
234
上一篇博客,Android-Java单例模式,介绍了在真实开发过程中,普遍使用的几种单例模式,而今天这篇博客,将要对单利模式进行优化 并且 通过多线程并发来分析 单利模式的优化: 对于为什么会出现安全问题,可以看Android-多线程安全问题-synchronized,博客 多线程并发实例化单例模式 ...
分类:
移动开发 时间:
2019-01-07 23:33:42
阅读次数:
296
并发(concurrency)一个并不陌生的词,简单来说,就是cpu在同一时刻执行多个任务。 而Java并发则由多线程实现的。 在jvm的世界里,线程就像不相干的平行空间,串行在虚拟机中。(当然这是比较笼统的说法,线程之间是可以交互的,他们也不一定是串行。) 多线程的存在就是压榨cpu,提高程序性能 ...
分类:
编程语言 时间:
2019-01-07 00:06:33
阅读次数:
169
先看一个售票案例Demo,多线程程序对共享数据操作引发的安全问题: 打印的日志结果,注意:?? 没有打印的日志结果都不同,这是CPU对线程非常快速的切换造成的,哪个线程先有执行权 就执行哪个线程 都是随机的 名称:Thread-0窗口卖出第10张票名称:Thread-3窗口卖出第9张票名称:Thre ...
分类:
移动开发 时间:
2019-01-06 12:02:30
阅读次数:
279
Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但其实,Spring并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。 Spring对每个bean提供了一个scope属性来表示该bean的作用域。它是bean的生命周期。例如,一个scope为sin ...
分类:
编程语言 时间:
2019-01-06 11:17:44
阅读次数:
185