Java 并发系列之十一:并发线程带来的风险
1. 概述
在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源。
线程带来的风险:
1. 安全性问题。错误的问题永不发生。竞态条件(顺序敏感)。
2. 活跃性问题。正确的事情一定会发生。死循环,死锁。
3. 性能问题。正确的事情尽快发生。服务时间过长,响应不灵敏,吞吐率过低
2. 安全性问题
定义:安全性问题的含义是“永远不发生糟糕的事情”
原因:内存共享,指令重排序,并行运行,操作顺序不可预测,将会在串行编程模型中引入非串行因素,产生奇怪的结果。便利的同时有风险,很难分析。
常见:有一种常见的并发安全问题叫“竞态条件”。
/** 1、什么是竞态条件?当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件。临界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现。 */
3. 活跃性问题
线程会导致一些在单线程程序中不会出现的问题,那就是活跃性问题。
活跃性则关注另外一个目标:“某件正确的事情最终会发生”。当某个操作无法继续执行下去时,就会发生活跃性问题。
在串行程序中,活跃性问题的一种就是无意中造成的无限循环,使得不能按照设计的工作进行,执行不到后面的代码。或者由于资源竞争而导致的死锁等。
4. 性能问题
活跃性意味着某件正确的事情会中会发生,但却不够好,因为我们希望正确的事情尽快发生。
性能问题包括多个方面,例如服务时间过长,响应不灵敏,吞吐率过低等等。
所以多线程需要良好的设计来提升线程的性能,但无论如何线程总会带来额外的开销,由于多线程之间的调度会频繁地出现上下文切换操作,保存和恢复执行上下文,线程之间共享数据时需要同步等等。
转载于:https://www.cnblogs.com/haimishasha/p/11591799.html
Java 并发系列之十一:并发线程带来的风险相关推荐
- java高并发系列 - 第6天:线程的基本操作,必备技能
新建线程 新建线程很简单.只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可. Thread thread1 = new Thread1(); t1.start(); 那么 ...
- Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景
之前谈过高并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 高并发编程系列:CountDownLatch.Semaphore等4大并发工具类详解 高并发编程系列:4大J ...
- 并发系列1:并发基础知识
本文是Java并发系列的开篇,主要讲一些并发的计算机基础知识.本系列所讲的知识框架也是基于<Java并发编程的艺术>一书,所讲的内容也多围绕于并发concurrent包下的类. 正文 并发 ...
- Java并发编程——线程带来的风险
在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源. 多线程将会带来几个问题: 一.安全性问题. 线程安全性可能是非常复杂的,多线程中的操作执行顺序是不可预测的,甚至会产 ...
- java学习系列2(并发锁问题-乐观锁与悲观锁以及乐观锁的一种实现方式-CAS)
Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS 首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别 ...
- java 控制线程的顺序_【Java多线程系列四】控制线程执行顺序
packagecom.concurrent.test;importjava.util.concurrent.CountDownLatch;importorg.junit.Assert;importor ...
- java线程同步的实现_【Java多线程系列三】实现线程同步的方法
packagecom.concurrent.test;importjava.util.Stack;importjava.util.concurrent.ArrayBlockingQueue;impor ...
- [单刷APUE系列]第十一章——线程[1]
线程概念 在前面的章节,都是以多进程单线程概念来讲解的,特别是早期的Unix环境,没有引入线程模型,所以无所谓线程概念,也就是一个进程在某一时刻只能做一件事情,而多线程则是可以让进程拥有多个线程,这样 ...
- Java NIO 系列教程 (十一) Datagram 通道
Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...
最新文章
- Appium学习笔记2_Android获取元素篇
- 用好 Java 中的枚举,真的没有那么简单!
- java同步机制简单介绍
- 【Python3】Tensorflow_Fasterrcnn训练自己数据集,Keras_Yolov3_GPU训练自己数据集
- ASP.NET Core 3.x启动时运行异步任务(二)
- 间接寻址级别不同_单片机指令系统与寻址方式
- Could not autowire. No beans of ‘xxxMapper‘ type found.
- 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
- LINUX下载编译libspeex/libspeexdsp
- 重物码垛搬运机器人_米克力美AGV:工业机器人的应用场景
- viper4android ddc,DDC工具箱app下载-DDC工具箱 安卓版v1.1-PC6安卓网
- 嵌入式用HTTP请求下载bin文件
- 数据结构与算法分析(C++语言版)_张琨版 第一章课后习题答案
- 腾讯云短信封装(v3版本)
- 1005打印任务取消不了 hp_(完整版)hp打印机无法取消打印的文档解决方法
- URL是什么意思 ? URL介绍
- 蓝牙模式-Inquiry and Page详细解析含参数
- 命令行解析模块 以及 metavar 和dest的理解
- 程序人生:羽翼未丰的我,当年如何在一个公司从A干到B
- 车联网智能终端GB/T 32960国标协议规范 、国标新能源车联网终端GB/T32960标准T-BOX应用
热门文章
- 使用SQL Agent和SignalR的每日提醒
- 微软重新设计 Edge for Android 的用户界面
- 因为计算机中丢失crlutl,crlutlintl.dll
- 正弦定理和余弦定理_高三 | 数学必修五正弦定理和余弦定理应用举例考点梳理...
- win10计算机管理如何分区,windows10如何对电脑硬盘进行分区
- C语言给考场编号,求:用C设计考场的编排,生成准考证号基本要求:br/(1)用 爱问知识人...
- 计算机网络的一大发展趋势是多维化,对口高考计算机网络概述复习.ppt
- Spring3.1.1+Jersey2.2+ehcache实现WebApp与服务器接口交互获取令牌及校验过程
- 计算工资底薪加提成的java_月工资如何计算我是做服务行业,底薪2200全勤100加提成5 - 找法网(findlaw.cn)...
- java md5 utf-8_Jquery与java MD5加密不同