java多线程
jrymos001
加油
展开
-
java多线程(一) 之 简介
一. 多线程的优势: GUI线程可以提高用户界面的响应灵敏度 服务器中,提升资源利用率以及系统吞吐率 简化JVM的实现 发挥多处理器的强大力量 建模的简单性 异步事件的处理简化二. 线程带来的风险 1.安全性问题: 例如非线程安全的数值生成器:public class UnsafeSequence { private int value; public int get原创 2017-04-19 22:59:17 · 285 阅读 · 0 评论 -
java多线程(七) 之 同步容器类
同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保护复合操作,比如如下: 1.线程不安全的复合操作1:import java.util.Vector;public class UnsafeVectorOperation { public static Object getLast(Vector<?> list){ int lastIndex = list.原创 2017-05-18 11:45:49 · 491 阅读 · 0 评论 -
java多线程(六) 之 店铺买卖多线程练习题
一. 店铺买卖题目如下:商家: 可以采购商品上架到店铺,并支付成本费用买家: 可以在店铺购买上架的商品,并把钱支付给店铺假设有n种商品可供商家上架:售价由商家可以自定假设初始数据如下:商品名称 成本 售价充气娃娃 98 388避孕套 8 19性感蕾丝 99 298避孕药 48 78...目的: 记录一天(假设为1000ms)内的所有交易记录,最后统计原创 2017-05-18 10:11:58 · 928 阅读 · 1 评论 -
java多线程(十) 之 构建高效且可伸缩的结果缓存
几乎所有的服务器应用程序都会使用某种形式的缓存,重用之前的计算结果能降低延迟,提高吞吐量,但却需要消耗更多的内存. 本节,我们将开发一个高效且可伸缩的缓存,用于改进一个高计算开销的函数. 我们首先从简单的HashMap开始,然后分析它的并发性缺陷,并讨论如何修复它们.public interface Computable<A, V> { V compute(A arg) throws I原创 2017-05-28 14:54:30 · 548 阅读 · 0 评论 -
java多线程(九) 之 同步工具类
同步工具类,可以是任何一个对象,只要它根据自身的状态来协调线程的控制流,阻塞队列可以作为同步工具类,其他类型的同步工具类还包括信号量,栅栏以及闭锁. 所有的同步工具类都包含了一些特定的结构化属性: 它们封装了一些状态,这些特定状态将决定执行同步工具类的线程是继续执行还是等待,此外还提供了一些方法对状态进行操作,以及一些方法用于高效地等待同步工具类进入预期状态.一. 闭锁闭锁是一种同步工具类,可以延原创 2017-05-28 09:39:51 · 313 阅读 · 0 评论 -
java多线程(五) 之 设计线程安全的类
学习书籍《Java concurrency in practice》设计线程安全类,三个基本要素: 找出构成对象状态的所有变量找出约束状态变量的不变性条件简历对象状态的并发访问管理策略1.使用java监视器模式(也就是synchronized模式)的线程安全计数器public class Counter { private long value = 0; public sync原创 2017-05-17 10:50:04 · 461 阅读 · 0 评论 -
java多线程(四) 之 线程池入门
线程的创建分为两类: 1.即时创建: 需要一个线程就创建一个线程. 例如: new Thread() new Runnable() new Callable()这三种方式都是即时创建线程 2.提前创建: 提前创建一定数量的线程,放入线程池中.一. 为何要用线程池: 当需要创建大量的线程时: 即时创建方式有一下缺点: 1.线程的生命周期开销非常的高2.资源原创 2017-05-16 11:55:51 · 197 阅读 · 0 评论 -
java多线程(三) 之 对象的共享
同步代码块和同步方法可以确保原子的方式执行操作,但一种常见的误解是,认为关键字synchronized只能用于实现原子性或者确定”临界区”,同步还有另外一个重要的方面:内存可见性.我们不仅希望防止某个线程正在使用对象状态而另一个线程在同时修改该状态,而且希望确保当一个线程修改了对象状态后,其他线程能够看到发生状态变化.一. 可见性 糟糕的案例如下:这段代码,无法保证主线程写入的ready的值和nu原创 2017-04-22 00:33:35 · 677 阅读 · 0 评论 -
java多线程(二) 之 线程安全性
如果当多个线程访问同一个可变的状态变量时,没有使用合适的同步,那么程序就会出现错误.有三种方式修复这个错误: 1. 不在线程之间共享该状态变量 2. 将状态变量修改为不可变的变量 3. 在访问状态变量时,使用同步一. 线程安全性 1.线程安全类: 当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正原创 2017-04-20 00:04:06 · 277 阅读 · 0 评论 -
java多线程(八) 之 并发容器
通过并发容器来替代同步容器,可以极大地提高伸缩性并降低风险.同步容器将所有对容器状态的访问都串行化,以实现它们的线程安全性,这种方法的代价是严重降低并发性,当多个线程竞争容器的锁时,吞吐量将严重降低.Java5.0版本中:Concurrent-HashMap,用来替代同步基于散列的MapCopyOnWriteArrayList,用于在遍历操作为主要操作情况下代替同步的list在新的Concurr原创 2017-05-19 10:23:07 · 556 阅读 · 0 评论