1. 概述

在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源。

线程带来的风险:

1. 安全性问题。错误的问题永不发生。竞态条件(顺序敏感)。

2. 活跃性问题。正确的事情一定会发生。死循环,死锁。

3. 性能问题。正确的事情尽快发生。服务时间过长,响应不灵敏,吞吐率过低

2. 安全性问题

  定义:安全性问题的含义是“永远不发生糟糕的事情”

  原因:内存共享,指令重排序,并行运行,操作顺序不可预测,将会在串行编程模型中引入非串行因素,产生奇怪的结果。便利的同时有风险,很难分析。

  常见:有一种常见的并发安全问题叫“竞态条件”。 

/**
1、什么是竞态条件?当两个线程竞争同一资源时,如果对资源的访问顺序敏感,就称存在竞态条件。导致竞态条件发生的代码区称作临界区。在临界区中使用适当的同步就可以避免竞态条件。临界区实现方法有两种,一种是用synchronized,一种是用Lock显式锁实现。
*/

3. 活跃性问题

    线程会导致一些在单线程程序中不会出现的问题,那就是活跃性问题。

    活跃性则关注另外一个目标:“某件正确的事情最终会发生”。当某个操作无法继续执行下去时,就会发生活跃性问题。

    在串行程序中,活跃性问题的一种就是无意中造成的无限循环,使得不能按照设计的工作进行,执行不到后面的代码。或者由于资源竞争而导致的死锁等。

4. 性能问题

    活跃性意味着某件正确的事情会中会发生,但却不够好,因为我们希望正确的事情尽快发生

    性能问题包括多个方面,例如服务时间过长,响应不灵敏,吞吐率过低等等。

    所以多线程需要良好的设计来提升线程的性能,但无论如何线程总会带来额外的开销,由于多线程之间的调度会频繁地出现上下文切换操作,保存和恢复执行上下文,线程之间共享数据时需要同步等等。

转载于:https://www.cnblogs.com/haimishasha/p/11591799.html

Java 并发系列之十一:并发线程带来的风险相关推荐

  1. java高并发系列 - 第6天:线程的基本操作,必备技能

    新建线程 新建线程很简单.只需要使用new关键字创建一个线程对象,然后调用它的start()启动线程即可. Thread thread1 = new Thread1(); t1.start(); 那么 ...

  2. Java多线程系列(七):并发容器的原理,7大并发容器详解、及使用场景

    之前谈过高并发编程系列: 高并发编程系列:4种常用Java线程锁的特点,性能比较.使用场景 高并发编程系列:CountDownLatch.Semaphore等4大并发工具类详解 高并发编程系列:4大J ...

  3. 并发系列1:并发基础知识

    本文是Java并发系列的开篇,主要讲一些并发的计算机基础知识.本系列所讲的知识框架也是基于<Java并发编程的艺术>一书,所讲的内容也多围绕于并发concurrent包下的类. 正文 并发 ...

  4. Java并发编程——线程带来的风险

    在并发中有两种方式,一是多进程,二是多线程,但是线程相比进程花销更小且能共享资源. 多线程将会带来几个问题: 一.安全性问题. 线程安全性可能是非常复杂的,多线程中的操作执行顺序是不可预测的,甚至会产 ...

  5. java学习系列2(并发锁问题-乐观锁与悲观锁以及乐观锁的一种实现方式-CAS)

    Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS 首先介绍一些乐观锁与悲观锁: 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别 ...

  6. java 控制线程的顺序_【Java多线程系列四】控制线程执行顺序

    packagecom.concurrent.test;importjava.util.concurrent.CountDownLatch;importorg.junit.Assert;importor ...

  7. java线程同步的实现_【Java多线程系列三】实现线程同步的方法

    packagecom.concurrent.test;importjava.util.Stack;importjava.util.concurrent.ArrayBlockingQueue;impor ...

  8. [单刷APUE系列]第十一章——线程[1]

    线程概念 在前面的章节,都是以多进程单线程概念来讲解的,特别是早期的Unix环境,没有引入线程模型,所以无所谓线程概念,也就是一个进程在某一时刻只能做一件事情,而多线程则是可以让进程拥有多个线程,这样 ...

  9. Java NIO 系列教程 (十一) Datagram 通道

    Java NIO中的DatagramChannel是一个能收发UDP包的通道.因为UDP是无连接的网络协议,所以不能像其它通道那样读取和写入.它发送和接收的是数据包. 打开 DatagramChann ...

最新文章

  1. Appium学习笔记2_Android获取元素篇
  2. 用好 Java 中的枚举,真的没有那么简单!
  3. java同步机制简单介绍
  4. 【Python3】Tensorflow_Fasterrcnn训练自己数据集,Keras_Yolov3_GPU训练自己数据集
  5. ASP.NET Core 3.x启动时运行异步任务(二)
  6. 间接寻址级别不同_单片机指令系统与寻址方式
  7. Could not autowire. No beans of ‘xxxMapper‘ type found.
  8. 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常
  9. LINUX下载编译libspeex/libspeexdsp
  10. 重物码垛搬运机器人_米克力美AGV:工业机器人的应用场景
  11. viper4android ddc,DDC工具箱app下载-DDC工具箱 安卓版v1.1-PC6安卓网
  12. 嵌入式用HTTP请求下载bin文件
  13. 数据结构与算法分析(C++语言版)_张琨版 第一章课后习题答案
  14. 腾讯云短信封装(v3版本)
  15. 1005打印任务取消不了 hp_(完整版)hp打印机无法取消打印的文档解决方法
  16. URL是什么意思 ? URL介绍
  17. 蓝牙模式-Inquiry and Page详细解析含参数
  18. 命令行解析模块 以及 metavar 和dest的理解
  19. 程序人生:羽翼未丰的我,当年如何在一个公司从A干到B
  20. 车联网智能终端GB/T 32960国标协议规范 、国标新能源车联网终端GB/T32960标准T-BOX应用

热门文章

  1. 使用SQL Agent和SignalR的每日提醒
  2. 微软重新设计 Edge for Android 的用户界面
  3. 因为计算机中丢失crlutl,crlutlintl.dll
  4. 正弦定理和余弦定理_高三 | 数学必修五正弦定理和余弦定理应用举例考点梳理...
  5. win10计算机管理如何分区,windows10如何对电脑硬盘进行分区
  6. C语言给考场编号,求:用C设计考场的编排,生成准考证号基本要求:br/(1)用 爱问知识人...
  7. 计算机网络的一大发展趋势是多维化,对口高考计算机网络概述复习.ppt
  8. Spring3.1.1+Jersey2.2+ehcache实现WebApp与服务器接口交互获取令牌及校验过程
  9. 计算工资底薪加提成的java_月工资如何计算我是做服务行业,底薪2200全勤100加提成5 - 找法网(findlaw.cn)...
  10. java md5 utf-8_Jquery与java MD5加密不同