一.可见性 什么是可见性? Java线程安全须要防止某个线程正在使用对象状态而还有一个线程在同一时候改动该状态,并且须要确保当一个线程改动了对象的状态后,其它线程能够看到发生的状态变化. 后者就是可见性的描写叙述即多线程能够实时获取其它线程改动后的状态.      *** 待补充   两个工人同一时候记录生产产品总数问题 1. 失效数据 可见性出现故障就是其它线程没有获取到改动后的状态,更直观的描写叙述就是其它线程获取到的数据是失效数据. 2. 非原子64位操作 3. 加锁与可见性 比如在一个变…
    Java没有提供不论什么机制来安全地(抢占式方法)终止线程,尽管Thread.stop和suspend等方法提供了这种机制,可是因为存在着一些严重的缺陷,因此应该避免使用. 但它提供了中断Interruption机制,这是一种协作机制,可以使一个线程终止还有一个线程的当前工作. 一.任务取消 取消操作的原因: . 用户请求取消 . 有时间限制的操作 . 应用程序事件 . 错误 . 关闭 结束任务的四种方式: 1. run方法运行结束 2. 使用请求关闭标记(比如boolean开关) 3.…
一.设计线程安全的类 在设计线程安全类的过程中,须要包括下面三个基本要素:  . 找出构成对象状态的全部变量.  . 找出约束状态变量的不变性条件.  . 建立对象状态的并发訪问管理策略. 分析对象的状态,首先从对象的域開始. 变量按作用域划分: . 全局变量 . 局部变量 . 方法行參 . 异常处理參数 1. 收集同步需求 假设不了解对象的不变性条件与后验条件,那么就不能确保线程安全性.要满足在状态变量的有效值或状态转换上的各种约束条件,就须要借助原子性和封装性. 说的更简略些是Java线程安…
一. 在线程中运行任务 无限制创建线程的不足 .线程生命周期的开销很高 .资源消耗 .稳定性 二.Executor框架 Executor基于生产者-消费者模式.提交任务的操作相当于生产者.运行任务的线程则相当于消费者. 1. Executors 返回 ExecutorService 2. ExecutorService方法submit.execute 3. ExecutorService.submit 返回 Future 线程池,Executors方法介绍 方法名 解释 newFixedThre…
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/love_world_/article/details/27635333 一.死锁 所谓死锁: 是指两个或两个以上的进程在运行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用.它们都将无法推进下去. 百科百科 当两个以上的运算单元,两方都在等待对方停止运行,以取得系统资源.可是没有一方提前退出时,这样的状况,就称为死锁.维基百科 1. 顺序死锁 最少有两个锁,一个线程获取到A锁须要获取B锁…
任务:通常是一些抽象的且离散的工作单元.大多数并发应用程序都是围绕"任务执行"来构造的,把程序的工作分给多个任务,可以简化程序的组织结构便于维护 一.在线程中执行任务 任务的独立性:任务并不依赖于其他任务的状态,结果和边缘效应.独立的任务可以实现并行执行 1.串行的执行任务 所有的任务放在单个线程中串行执行,程序简单,安全性高,不涉及同步等情况,缺点也显而易见,无法提高吞吐量和响应速度,适合任务数量很少并且执行时间很长时,或者只为单个用户使用,并且该用户每次只发出一个请求. 2.显示的…
1.线程池 众所周知创建大量线程时代价是非常大的: - 线程的生命周期开销非常大:创建需要时间,导致延迟处理请求,jvm需要分配空间. - 资源消耗:线程需要占用空间,如果线程数大于可用的处理器数量,那么线程就会闲置,这给Gc造成压力.线程在竞争cpu的时候也会造成性能开销,所以线程不是越多越好,使用不当并不会增加运行效率. - 稳定性:使用不当会造成内存溢出. 继而就引申出线程池. 1.1线程池的创建 Executors框架:静态方法创建 newCachedThreadPool:创建可变线程数…
一.在任务与运行策略之间的隐性解耦 有些类型的任务须要明白地指定运行策略,包含: . 依赖性任务.依赖关系对运行策略造成约束.须要注意活跃性问题. 要求线程池足够大,确保任务都能放入. . 使用线程封闭机制的任务.须要串行运行. . 对响应时间敏感的任务. . 使用ThreadLocal的任务. 1. 线程饥饿死锁 线程池中假设全部正在运行任务的线程都因为等待其它仍处于工作队列中的任务而堵塞.这样的现象称为线程饥饿死锁. 2. 执行时间较长的任务 Java提供了限时版本号与无限时版本号. 比如T…
造成开销的操作包含: 1. 线程之间的协调(比如:锁.触发信号以及内存同步等) 2. 添加�的上下文切换 3. 线程的创建和销毁 4. 线程的调度 一.对性能的思考 1 性能与可伸缩性 执行速度涉及下面两个指标: 某个指定的任务单元须要"多快"才干处理完毕.计算资源一定的情况下,能完毕"多少"工作. 可伸缩性: 当添加�计算资源时(比如:CPU.内存.存储容器或I/O带宽),程序的吞吐量或者处理能力能对应地添加�. 2 评估各种性能权衡因素 避免不成熟的优化.首先使…
一.同步容器类 1. 同步容器类的问题 线程容器类都是线程安全的.可是当在其上进行符合操作则须要而外加锁保护其安全性. 常见符合操作包括: . 迭代 . 跳转(依据指定顺序找到当前元素的下一个元素) . 条件运算 迭代问题能够查看之前的文章 <Java ConcurrentModificationException 异常分析与解决方式> 二.并发容器 集合类型 非线程安全 线程安全 List ArrayList CopyOnWriteArrayList Set SortedSet Concur…