上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 31 下一页
摘要: 一 .概述 在之前我们讨论过线程安全性的问题,我们通过加锁或者使用无锁来保证线程安全. 当然无锁的性能会变得更好.但是他们的实质的核心都是保证对访问的资源的原子性. 那我们回忆一下线程安全性问题的发生的条件: [1]多线程并发 [2]共享资源 [3]对共享资源的非原子性操作 我们如果将共享资源打破掉 阅读全文
posted @ 2018-05-07 20:16 最爱五仁月饼 阅读(212) 评论(0) 推荐(0) 编辑
摘要: 一 . 概述 我们知道加锁会对多线程的并发有影响,那么我们是否有无锁的方式保证线程的安全性呢?有的,就是CAS方式. CAS的核心就是乐观的尝试,将线程的阻塞变成了线程的尝试,认为即使在不断尝试的代价也比阻塞后唤醒的代价要小. 二 CAS CAS到底是什么呢? 其实就是一个JVM的指令,其中这个指令 阅读全文
posted @ 2018-05-05 23:35 最爱五仁月饼 阅读(122) 评论(0) 推荐(0) 编辑
摘要: 一 .概述 在我们之前的计数程序之中,我们知道只要保证count++是一个原子性的操作就能保证程序的线程安全性. 当然这种常用的功能在jdk5中就出现了,这就是原子类. 原子类都是JUC包下atomic之中,类的数量比较多. 二 . 原子类的介绍 原子类的操作之中可以保证是线程安全的,当我们的应用之 阅读全文
posted @ 2018-05-05 23:19 最爱五仁月饼 阅读(93) 评论(0) 推荐(0) 编辑
摘要: 一 . 概述 可见性问题: 什么是可见性问题?可见性问题的原因是什么? 可见性问题完全是JVM的结构造成的,JVM为了高速的运行,对每一个线程进行了线程栈的设计,在线程栈之中设置了高速的缓存. 缓存之中存在共享变量的副本,在有些时候,因为来不及维护副本和实体的一致性可能造成问题,这种问题就是可见性问 阅读全文
posted @ 2018-05-05 21:49 最爱五仁月饼 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 一 .概述 在synchronized之中可能有一个悖论,就是获得锁的线程调用两个互相调用的加锁方法会出现什么情况,如果处置不当,那么就会发生死锁. 但是幸运的是,synchronized是可以重入的. 二 .例子 运行结果并没有发生我们可能会认为的死锁问题,也就说明了synchronized是可以 阅读全文
posted @ 2018-05-05 21:26 最爱五仁月饼 阅读(115) 评论(0) 推荐(0) 编辑
摘要: 一 .概述 在之前我们知道了synchronized关键词的运行机制,但是同时指出了synchronized的劣势,那就是粒度过大. 在jdk6之后,对synchronized进行了优化. 现在的synchronized对应锁按照竞争的程度进行了划分,完成锁的等级制度,但是锁的等级上升之后不能降级. 阅读全文
posted @ 2018-05-05 21:18 最爱五仁月饼 阅读(104) 评论(0) 推荐(0) 编辑
摘要: 一 . 概述 在前面我们说到线程安全性问题解决的核心就是同步,同步的核心就是保证原子性. 在java之中最早就支持语法层面的同步解决了,并且提供了synchronized的方式解决问题. 二 .内置锁 在java之中每一个对象都是一个内置锁,这个在JVM的体系之中就规定好了. 内置锁的规定也就决定我 阅读全文
posted @ 2018-05-05 20:55 最爱五仁月饼 阅读(216) 评论(0) 推荐(0) 编辑
摘要: 一 . 概述 在之前,我们说到线程安全性问题是我们在并发设计首要考虑的问题. 那么到底什么是并发问题呢? 看下面的例子(经典的例子): 上面的代码描述了两个线程共同将一个count自增,每人1000次,但是最后运行的结果让我们大失所望,几乎每次都不是2000次. 二 .问题的分析 其实最根本的问题就 阅读全文
posted @ 2018-05-05 20:12 最爱五仁月饼 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 一 .概述 在之前我们将线程的一些基本的问题都做出讲解,现在我们开始接触线程的真正的核心问题,那就是线程的并发问题. 线程的安全问题主要有三个方面: [1]线程安全问题 [2]线程活跃性问题 [3]线程性能问题 二 .线程安全问题 当多线程并发的时候,可能出现多线程争夺资源的问题,当处理不好就会发生 阅读全文
posted @ 2018-05-05 19:56 最爱五仁月饼 阅读(98) 评论(0) 推荐(0) 编辑
摘要: 一 .概述 我们知道一个线程运行之后,它会另外开启一个线程栈来完成自己的任务的运行,此时异常的捕获就是一个问题. 二 .异常的演示 我们运行上述的程序,结果如下: 我们发现我们根本无法捕获线程抛出的异常,仅仅就是打印了一个线程的堆栈信息. 三 . 使用线程异常处理器完成任务 首先,我们定义了一个内部 阅读全文
posted @ 2018-05-05 19:42 最爱五仁月饼 阅读(108) 评论(0) 推荐(0) 编辑
上一页 1 ··· 18 19 20 21 22 23 24 25 26 ··· 31 下一页