关键词:
一 . 概述
多线程可以帮助我们实现并发,但是并发会带来一些问题.
[1]线程安全问题
[2]活跃问题
[3]性能问题
二 . 活跃性问题
常见的活跃性问题有:
[1]死锁 :
经典的死锁问题有哲学家问题,当出现死锁的时候,程序就无法继续运行了.
出现死锁问题的主要原因就是:
仅仅获取部分资源,但是不会放弃当前的资源.
[2]饥饿
由于线程优先级的问题.有的线程可能很久都不会运行一次.
经典的问题: 高优先级的线程长时间占用时间片,其他的低优先级的线程就被饿死了.
[3]活锁
经典的问题:
两个线程互相谦让资源,但是没有放弃的资源之后又获取了其它的资源.
比如说让路的问题.
活锁比死锁要危害大很多,也不容易进行检测.
死锁检测:
我们可以使用工具来进行死锁的检测,但是对于饥饿和活锁就很难检测了.
三 . 性能问题
多线程的并发的根本是时间片在切换,但是时间片的切换是需要时间的.
当切换时间片花费了更多的时间之后,原先都给程序正常运行的资源都被时间片切换
使用了,那么性能就会出现问题.
性能的问题的核心就是:
确定是否需要并发,多少并发量,并发的时间的花费.
四 .安全问题
当多线程执行时,会发生资源的争夺问题,如果控制不当,那么就会出现错误的结果.
这就是线程安全问题.
安全问题的解决:
使用线程同步来解决该问题.
007-atomic包的原理及分析(代码片段)
...Atomic简介 Atomic包是java.util.concurrent下的另一个专门为线程安全设计的Java包,包含多个原子操作类。这个包里面提供了一组原子变量类。其基本的特性就是在多线程环境下,当有多个线程同时执行这些类的实例包含的方法时,... 查看详情
3线程带来的风险
线程安全问题从字节码的角度看线程安全性问题多线程环境下多个线程共享一个资源对资源进行非原子性问题线程活跃性问题 1、死锁 产生死锁的原因系统资源不足进程运行推进的顺序不合适资源分配不当 关于死锁出现... 查看详情
线程带来的风险
...无法继续执行下去的时候就会发生活跃性问题。例:如果线程A在等待线程B释放资源,而线程B永远不释放资源,那A就会永远等待下去。活跃性问题包括:死锁、饥饿、活锁等。活跃性意味着某件正确的事情最终会发生,但却不... 查看详情
应用系统管理风险
... 管理风险应用系统 可用性风险程序风险线程安全风险某系统将登陆账号保存在实例变量中,导致信息泄露,用户A看到用户B的数据。修改代码缺陷,防止线程安全问题2018/6/23 Jo 查看详情
通过接受关闭另一个线程中使用的套接字有啥风险?
】通过接受关闭另一个线程中使用的套接字有啥风险?【英文标题】:what\'stheriskofclosingsocketwhichisusedinanotherthreadbyaccept?通过接受关闭另一个线程中使用的套接字有什么风险?【发布时间】:2015-01-3016:04:47【问题描述】:我有一... 查看详情
线程池相关的问题
一:为什么要创建线程池? 在面向对象编程中,对象创建和销毁是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后... 查看详情
高并发编程-03-并发编程存在的风险
多线程的高并发编程提高了我们的CPU利用率及简化开发模式,但是又同时给我们带来了风险,使用不当就会有风险,那到底有什么风险?我们来看看1,线程的安全性问题假设,我现在编写了一个程序,来保存系统的访问量,如... 查看详情
多线程的风险---线程安全(代码片段)
...;敬事如仪;自知自心,其路则明。目录🍸一.线程不安全🍹二.线程不安全的原因🍸一.线程不安全多线程编程,最重要,也是最困难的问题就是线程安全问题,它的万恶之源,罪魁祸首就是调... 查看详情
3线程带来的风险
线程安全问题从字节码的角度看线程安全性问题多线程环境下多个线程共享一个资源对资源进行非原子性问题线程活跃性问题 1、死锁 产生死锁的原因系统资源不足进程运行推进的顺序不合适资源分配不当 关于死锁出现... 查看详情
showproceslist时发现大量的sleep,有啥风险吗,该如何处理?
...吗,该如何处理?答:(一)可能的风险有:1、大量sleep线程会占用连接数,当超过max_connections后,新连接无法再建立,业务不可用;2、这些sleep线程中,有些可能有未提交事务,可能还伴随着行锁未释放,有可能会造成严重锁... 查看详情
faqaboutwoyopdr007dentremovalheatinductionsystem
WOYOPDR007isadentrepairtoolforautomaintence.WOYOPDR007AutoBodyPaintlessDentRepairKitToolisthefirstdentfixdevicewhichisfromchina.itcomewith110Vor220V-240Vvlotageoptional.WOYOPDR007willpayforitselfbyrpe 查看详情
faqaboutwoyopdr007dentremovalheatinductionsystem
WOYOPDR007isadentrepairtoolforautomaintence.WOYOPDR007AutoBodyPaintlessDentRepairKitToolisthefirstdentfixdevicewhichisfromchina.itcomewith110Vor220V-240Vvlotageoptional.WOYOPDR007willpayforitselfbyrpe 查看详情
idea多线程调试设置
...blog.csdn.net/kevindai007/article/details/71412324 使用idea调试多线程的时候发现多线程无法调试,后来经过搜索发现,idea的断点有不同的模式,只有当Thread模式下才能调试多线程,设置方式如下:在断点上右键选择Thread,然后点Done(建议选择Thr... 查看详情
为啥 Number.MAX_SAFE_INTEGER 是 9,007,199,254,740,991 而不是 9,007,199,254,740,992?
】为啥Number.MAX_SAFE_INTEGER是9,007,199,254,740,991而不是9,007,199,254,740,992?【英文标题】:WhyisNumber.MAX_SAFE_INTEGER9,007,199,254,740,991andnot9,007,199,254,740,992?为什么Number.MAX_SAFE_INTEGER是9,007,199,254,740,991而不是9,007,199,25 查看详情
java~线程池的总结~续(代码片段)
上一讲主要谈了java里的线程池的使用,而主要使用Executors的方式去创建,比如Executors.newCachedThreadPool(),Executors.newFixedThreadPool(5)等等,而这些方式在阿里手册里是不被推荐的,而是推荐使用ThreadPoolExecutor的方式,我想应该也是避... 查看详情
我会手动创建线程,为什么让我使用线程池?(代码片段)
...,觉得不错,还请Star??上一篇文章面试问我,创建多少个线程合适?我该怎么说从定性到定量的分析了如何创建正确个数的线程来最大化利用系统资源(其实就是几道小学数学题)。通常来讲,有了个这个知识点傍身,按需手动... 查看详情
线程局部变量
线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持线程局部变量,是一种实现线程安全的方式。但是在管理环境下(如web服务器)使用线程局部变量的时候要特别小心,... 查看详情
python入门100题|第007题
前言: 查看详情