多线程
文章平均质量分 68
抽离的心
其实我们大家的努力程度还远远没有到拼智商的程度(⊙o⊙)
展开
-
深入并发包ConcurrentHashMap
原文地址:http://pettyandydog.com/2017/07/27/concurrentHashMap/前言以前写过介绍HashMap的文章,文中提到过HashMap在put的时候,插入的元素超过了容量(由负载因子决定)的范围就会触发扩容操作,就是rehash,这个会重新将原数组的内容重新hash到新的扩容数组中,在多线程的环境下,存在同时其他的元素也在进行put操作,如果hash值相...转载 2018-05-18 23:39:38 · 198 阅读 · 0 评论 -
并发包有了AtomicLong为什么还需要LongAdder?
1.AutomaticLong和LongAdder区别 AutomaticLong的底层是通过CAS(compareAndSwap)来实现线程的同步,是在一个死循环内不断的尝试修改目标的值,直到修改成功。如果在竞争不激烈的情况下,它修改成功的概率很高,否则的话修改失败的概率就会很高, 在大量修改失败的时候这些原子操作就会多次循环尝试, 因此性能就会受到影响。对于普通类型的long和...原创 2018-08-11 09:47:26 · 1769 阅读 · 1 评论 -
一个 Linux上分析死锁的简单方法
1.简介 死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。 由于资源占用是互斥的,当某个进程提出申请资源后,使得有关进程(线程)在无外力协助下,永远分配不到必需的资源而无法继续运行,这就产...转载 2018-07-15 11:20:16 · 1382 阅读 · 0 评论 -
千万级规模高性能、高并发的网络架构经验分享
1.架构以及我理解中架构的本质 在开始谈我对架构本质的理解之前,先谈谈对今天技术沙龙主题的个人见解,千万级规模的网站感觉数量级是非常大的,对这个数量级我们战略上要重视它,战术上又要藐视它。先举个例子感受一下千万级到底是什么数量级?现在很流行的优步Uber,从媒体公布的信息看,它每天接单量平均在百万左右, 假如每天有10个小时的服务时间,平均QPS只有30左右。对于一个后台服务器,单机的平...转载 2018-07-08 23:50:17 · 404 阅读 · 0 评论 -
彻底理解ThreadLocal
1.ThreadLocal相关类介绍ThreadLocalMap(内部类)Thread 首先,在Thread类中有一行: /* ThreadLocal values pertaining to this thread. This map is maintained by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap thr...转载 2018-05-24 20:25:17 · 211 阅读 · 0 评论 -
Java并发程序设计一
1.线程新建 不要用run()来开启线程,它只会在当前线程中,串行执行run()方法中的代码;创建线程时,推荐传入Runnable接口的实例,因为默认的Thread.run()就是直接调用内部的Runnable接口,这样避免了重载Thread.run(),因此使用Runnable接口来告诉线程该做什么更为合理。2.线程终止设置退出标志使线程正常退出,也就是run()方法执行完毕后正常终止线...原创 2018-05-24 00:07:36 · 231 阅读 · 0 评论 -
关于SimpleDateFormat安全的时间格式化线程安全问题
1.概述 想必大家对SimpleDateFormat并不陌生。SimpleDateFormat 是 Java 中一个非常常用的类,该类用来对日期字符串进行解析和格式化输出,但如果使用不小心会导致非常微妙和难以调试的问题,因为 DateFormat 和 SimpleDateFormat 类不都是线程安全的,在多线程环境下调用 format() 和 parse() 方法应该使用同步代码来避...转载 2018-05-23 14:31:11 · 162 阅读 · 0 评论 -
ReenTrantLock可重入锁和synchronized的区别
原文地址:https://blog.csdn.net/qq838642798/article/details/65441415可重入性 从名字上理解,ReenTrantLock的字面意思就是再进入的锁,其实synchronized关键字所使用的锁也是可重入的,两者关于这个的区别不大。两者都是同一个线程没进入一次,锁的计数器都自增1,所以要等到锁的计数器下...转载 2018-05-16 20:15:32 · 447 阅读 · 0 评论 -
多线程常用的线程模型
1.Futura模型 Future模型通常在使用的时候需要结合Callable接口配合使用,Future模型即是把线程的执行结果放到将来获取。当前主线程并不急于获取处理结果时,允许子线程先进行处理一段时间,处理结束之后就把结果保存下来,当主线程需要使用的时候再向子线程索取。Callable是类似于Runnable的接口,其中call方法类似于run方法,所不同的是run方法不能抛出受检异...转载 2018-06-03 23:31:15 · 3373 阅读 · 0 评论 -
Java线程池异常处理机制
原文链接:https://my.oschina.net/lifany/blog/884002一、前言 线程池技术是服务器端开发中常用的技术。不论是直接还是间接,各种服务器端功能的执行总是离不开线程池的调度。关于线程池的各种文章,多数是关注任务的创建和执行方面,对于异常处理和任务取消(包括线程池关闭)关注的偏少。接下来,本文将从 Java 原生线程、两种主要线程池 ThreadPoolEx...转载 2018-05-15 20:32:42 · 5030 阅读 · 0 评论 -
Java子线程中的异常处理(通用)
1.常见错误 在普通的单线程程序中,捕获异常只需要通过try ... catch ... finally ...代码块就可以了。那么,在并发情况下,比如在父线程中启动了子线程,如何正确捕获子线程中的异常,从而进行相应的处理呢?也许有人会觉得,很简单嘛,直接在父线程启动子线程的地方try ... catch一把就可以了,其实这是不对的。2.原因分析 让我们回忆一下Runnable...转载 2018-05-15 19:43:26 · 1290 阅读 · 0 评论 -
Java并发程序设计基础
1.并发程序设计的基本概念1.并发和并行:并发偏重于多个任务交替执行,而多个任务之间有可能还是串行的;并行是真正意义上的“同时执行”。2.临界区:用来表示共享资源或者公共数据,可以被多个线程使用,但是每一次只能有一个线程使用它,一旦临界资源被占用,其他线程要想使用这个资源就必须等待。3.阻塞和非阻塞:阻塞和非阻塞通常用来形容多个线程之间的相互影响。4.死锁:指两个或两个以上的进程在执行过程中,由于...原创 2018-05-15 07:14:47 · 208 阅读 · 0 评论 -
线程的生命周期
线程状态定义1. 新建(NEW):新创建了一个线程对象。2. 就绪(RUNNABLE):线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获取cpu 的使用权 。3. 运行(RUNNING):可运行状态(runnable)的线程获得了cpu 时间片(timeslice) ,执行程序代码。4. 阻塞(BLOCKED):阻...转载 2018-05-14 20:41:54 · 155 阅读 · 0 评论 -
Java高内存占用问题排查
1.搞Java开发的,经常会碰到下面两种异常: java.lang.OutOfMemoryError: PermGen space java.lang.OutOfMemoryError: Java heap space 要详细解释这两种异常,需要简单重提下Java内存模型。Java内存模型是描述Java程序中各变量(实例域、静态...转载 2018-05-21 09:09:55 · 27574 阅读 · 1 评论 -
如何判断线程池中所有线程是否执行完毕
1.根据线程池中的总线程数目等于完成的线程数目package com.luna.thread;import java.util.Random;import java.util.concurrent.LinkedBlockingQueue;import java.util.concurrent.ThreadPoolExecutor;import java.util.concurrent.Ti...原创 2018-05-14 19:44:40 · 11202 阅读 · 0 评论 -
为什么volatile不能保证原子性而Atomic可以?
在上篇《非阻塞同步算法与CAS(Compare and Swap)无锁算法》中讲到在Java中long赋值不是原子操作,因为先写32位,再写后32位,分两步操作,而AtomicLong赋值是原子操作,为什么?为什么volatile能替代简单的锁,却不能保证原子性?这里面涉及volatile,是java中的一个我觉得这个词在Java规范中从未被解释清楚的神奇关键词,在Sun的JDK官方文档...转载 2018-05-19 23:29:24 · 149 阅读 · 0 评论 -
Java中的volatile关键字
1.内存可见性 由于 Java 内存模型( JMM)规定,所有的变量都存放在主内存中,而每个线程都有着自己的工作内存(高速缓存)。线程在工作时,需要将主内存中的数据拷贝到工作内存中。这样对数据的任何操作都是基于工作内存(效率提高),并且不能直接操作主内存以及其他线程工作内存中的数据,之后再将更新之后的数据刷新到主内存中。这里所提到的主内存可以简单认为是堆内存,而工作内存则可以认为是栈内...原创 2018-05-19 11:14:53 · 112 阅读 · 0 评论 -
JAVA线程通信详解
目录一、概述二、wait/notify 机制三、Condition四、生产者/消费者模式五、线程间的通信——管道六、方法Join的使用一、概述 线程与线程之间不是相互独立的个体,它们彼此之间需要相互通信和协作,最典型的例子就是生产者-消费者问题:当队列满时,生产者需要等待队列有空间才能继续往里面放入商品,而在等待的期间内,生产者必须释放对临界资源(即队列...转载 2018-10-14 09:11:36 · 23265 阅读 · 5 评论