![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
多线程与并发
liao1990
这个作者很懒,什么都没留下…
展开
-
死锁,活锁和饥饿
死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。 死锁发生的条件互斥条件:线程对资源的访问是排他性的,如果一个线程对占用了某资源,那么其他线程必须处于等待状态,直到资源被释放。请求和保持条件:线程T1至少已经保持了一个资源R1占用,但又提出对...转载 2018-06-15 12:13:54 · 123 阅读 · 0 评论 -
两种调试死锁的方法
方法1:通过core文件调试死锁步骤: 1. ulimited -c unlimted(打开core,默认没有打开) 2. 运行./a.out(编译的时候加调试选项-g) 死锁阻塞,Ctrl+\ 产生core dump 3. gdb ./a.out core.xxx 4. thread apply all bt查看死锁位置 例子(待续…)#include <stdio.h> ...转载 2018-07-04 00:04:00 · 2387 阅读 · 1 评论 -
多线程死锁调试小技巧
据说再高的高手在写多线程程序的时候都难确保不会产生死锁,死锁的调试也就成为一个比较常见的问题,假设有下面这样一个问题: 一个正在生产环境下运行的进程死锁了,或者你只是在跑一个程序,并没有在调试器里面打开它,然后发现没有响应,日志输出也停止了。由于你是一个有经验的程序员,会想到“我刚刚加上了新的锁策略,不一定稳定,这可能是死锁了“。但是你不想就这么杀掉进程,因为多线程的 bug 不容易重现,遇上一...转载 2018-07-04 00:02:33 · 136 阅读 · 0 评论 -
后台线程(daemon)
Java多线程——<五>后台线程(daemon)一、后台线程(守护线程) 学一个东西,最重要的一点就是,为什么要用它? 后台线程区别于普通线程,普通线程又可以称为用户线程,只完成用户自己想要完成的任务,不提供公共服务。而有时,我们希望编写一段程序,能够提供公共的服务,保证所有用户针对该线程的请求都能有响应。 仔细来看下后台线程的定义:指在程序运行的时候在后台提供一种通用服务的线程...转载 2018-07-01 20:45:02 · 362 阅读 · 0 评论 -
Java中的阻塞队列
聊聊并发(七)——Java中的阻塞队列聊聊并发(七)——Java中的阻塞队列原文首发于InfoQ1. 什么是阻塞队列?阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队...转载 2018-07-01 20:38:31 · 112 阅读 · 0 评论 -
多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目
多线程之线程池-各个参数的含义- 阿里,美团,京东面试题目阿里的面试官问了个问题,如果corepollSize=10,MaxPollSize=20,如果来了25个线程 怎么办, 答案:当一个任务通过execute(Runnable)方法欲添加到线程池时:1、 如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。2、 如果此时...转载 2018-07-01 20:29:29 · 511 阅读 · 0 评论 -
BlockingQueue(阻塞队列)详解
注意:该随笔内容完全引自http://wsmajunfeng.iteye.com/blog/1629354,写的很好,非常感谢,复制过来算是个积累,怕以后找不到。一. 前言 在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了Blockin...转载 2018-07-01 12:20:22 · 437 阅读 · 0 评论 -
TPS和QPS的区别和理解
QPS:Queries Per Second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。TPS:是TransactionsPerSecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使...转载 2018-06-09 16:08:21 · 80761 阅读 · 12 评论 -
ThreadLocal使用场景及其优势
曾经很疑惑ThreadLocal是干什么用?什么场景下要用?查了几篇文章,都说它的优势是线程安全,想必他的作用就是为了线程安全吧。仔细理解后发现,原来我们常用的局部变量和静态变量,在某种情况下无法满足要求,比如,我要求缓存一个变量,这个时候你肯定会说搞一个静态map存一下就OK了,但是有几个问题:第一:其他线程擅自修改我的这个静态map怎么办?第二:静态map之间并发访问怎么办?当然,也有人说而已...转载 2018-06-08 21:31:03 · 1531 阅读 · 0 评论 -
ThreadLocal使用场景及其优势
曾经很疑惑ThreadLocal是干什么用?什么场景下要用?查了几篇文章,都说它的优势是线程安全,想必他的作用就是为了线程安全吧。仔细理解后发现,原来我们常用的局部变量和静态变量,在某种情况下无法满足要求,比如,我要求缓存一个变量,这个时候你肯定会说搞一个静态map存一下就OK了,但是有几个问题:第一:其他线程擅自修改我的这个静态map怎么办?第二:静态map之间并发访问怎么办?当然,也有人说而已...转载 2018-06-08 21:31:03 · 3627 阅读 · 1 评论 -
彻底理解ThreadLocal
先总述,后分析 深挖过threadLocal之后,一句话概括:Synchronized用于线程间的数据共享,而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到。 数据隔离的秘诀其实是这样的,Thread有个TheadLocalMap类型的属性,叫做threadLocals...转载 2018-06-08 21:28:49 · 190 阅读 · 0 评论 -
ThreadLocal使用方法
ThreadLocal:用于实现线程内部的数据共享叫线程共享(对于同一个线程内部数据一致),即相同的一段代码 多个线程来执行 ,每个线程使用的数据只与当前线程有关。 实现原理:ThreadLocal相当于一个map 当前线程 存储当前的变量的时候 map.put(确定线程的唯一值(比如变量名称),变量),然后获取的时候直接拿过来就行 一般用法:定义一个全局变量ThreadLoacl t...转载 2018-06-08 20:37:38 · 2611 阅读 · 0 评论 -
ThreadLocal的使用
ThreadLocal的定义和用途的概述(我的理解):它是一个线程级别变量,在并发模式下是绝对安全的变量,也是线程封闭的一种标准用法(除了局部变量外),即使你将它定义为static,它也是线程安全的。 ThreadLocal能做什么呢?这个一句话不好说,我们不如来看看实际项目中遇到的一些困解:当你在项目中根据一些参数调用进入一些方法,然后方法再调用方法,进而跨对象调用方法,很多层次,这些方法可能都...转载 2018-06-08 20:30:56 · 158 阅读 · 0 评论 -
线程相关题
1、java中多线程同步是什么?答:在多线程的程序下,同步能控制对共享资源的访问,如果没有同步,当一个java线程在修改一个共享变量时,另一个java线程正在使用或者更新同一个变量这样容易导致程序出现错误的结果。2、线程有几种?有哪些实现的方法?答:多线程有两种实现方法,一种是继承Thread类另一种是实现Runable接口。3、Thread.start()和Thread.run()有什么区别?答...转载 2018-06-15 12:24:10 · 371 阅读 · 0 评论 -
[Java算法]--生成全局唯一的Id(IdGen)
全局唯一ID生成器浅析 我们在开发中,有时非常需要一个全局唯一的ID值,不管是业务需求,还是为了以后可能的分表需求,全局唯一值都非常有用,本篇大象就来讲讲这个实现并对ID生成器性能进行一下测试。 大象所讲的这个全局唯一ID生成器,其实是Twitter公开的一个算法,源码是用Scala写的,被国内的开源爱好者改写成了Java版本。 大象将这个类的调用简化了一下,实际使用中还是应该...转载 2018-08-13 11:31:32 · 833 阅读 · 0 评论