
多线程
田培融
这个作者很懒,什么都没留下…
展开
-
CountDownLatch源码解析加流程图详解--AQS类注释翻译
功能定义这个类是一个叫名Doug Lea的java 并发大神开发的。 是在jdk1.5中添加的。其官方解释为:A synchronization aid that allows one or more threads to wait until a set of operations being performed in other threads completes.他的意思是CountDownLatch是一个同步工具,他的功能是允许一个或多个线程处于等待状态,直到其他的线程执行完成一组操作原创 2020-08-07 17:53:01 · 484 阅读 · 0 评论 -
限流和对象池简单实现
限流和自定义对象池限流是当资源有限的时候,限制客户端对资源访问的一种思路。比如当访问量过大的时候,限制用户访问并给予用户友好的反馈。在比如我们常用的线程池就是一种限池,服务器不可能无限的创建线程,因为就有了线程池,给予一个合适的线程数量让客户端去使用...原创 2019-05-17 14:26:00 · 194 阅读 · 0 评论 -
Dubbo如何用管程实现异步转同步?
总览condition 是java 并发包中的一个类, 在java内置管程中是一个条件变量的,而condition是可以实现一个管程多个条件变量, 在java并发包原创 2019-05-15 21:26:55 · 3285 阅读 · 0 评论 -
临界区、管程、信号量介绍
前言临界区、管程、信号量是操作系统对并发编程支持的三个概念。它们并不是属于java,而是属于操作系统(目前我知道 linux有这三个概念,我觉得windows也应该有只是不确定,否则怎么会支持多核CPU呢?)。临界区临界区是线程需要互斥执行的一段代码。临界区的资源是线程共享的,但是执行的返回结果是不确定的。 举个例子:linux系统中的fork()命令会开启一个子线程,每个子线程都应该去调用...原创 2019-05-13 19:22:26 · 1226 阅读 · 0 评论 -
Lock重入锁
前言在并发编程中有两个核心问题, 一个是互斥另一个是同步。在java sdk并发包中,lock就是解决互斥问题,conditon就是解决同步问题。Locklock有三个重要的特性:能够响应中断: 线程在没有获取锁的时候,进入阻塞状态。我们能够给进入阻塞状态的线程发送信号,重新唤醒它。支持超时: 在无法获取锁的时候,就等待一定的时间。超时就自动返回。非阻塞的获取锁:如果无法获取锁就马上...原创 2019-05-06 13:23:17 · 512 阅读 · 0 评论 -
Semaphore信号量
Semaphore是计数信号量。Semaphore管理一系列许可证。 常用有两个方法: acquire方法阻塞线程,直到有一个许可证可以获得然后拿走一个许可证; release方法增加一个许可证,会释放一个阻塞的acquire方法。 然而,其实并没有实际的许可证这个对象,Semaphore只是维持了一个可获得许可证的数量。Semaphore经常用于限制获取某种资源的线程数量。下面举个例...原创 2018-05-09 09:47:01 · 681 阅读 · 0 评论 -
互斥锁避免死锁实践
死锁造成的原因有线程T1 和线程T2 ,T1占用资源A也就是锁住了A对象synchronized(A),T2占用资源B也就是锁住了资源B对象syncrhonized。此时T1线程在去申请获取B对象的时候,T2线程还没有释放资源。T1线程就会一直等待资源B,并且也不会释放资源A.而T2也去申请资源A,就会等待资源A被释放,并且也不会释放资源B. 因此就会形成死锁。class Account {...原创 2019-04-23 16:29:42 · 785 阅读 · 2 评论 -
java等待-通知机制 synchronized和waity()的使用实践
介绍等待-通知机制java在多线程开发当中对锁等待的一种完善。 当一个线程无法满足当前工作的条件的时候,可以让其进入对象等待池,并释放掉当前锁对象。当其他线程调用notifyAll() 或者notify()的时候就会唤醒线程,将线程放入** 锁等待池**。 可以进行争夺锁对象。使用方法可以调用wait()方法将线程放入等待池。wait()需要和synchronized 关键字一起使用。需...原创 2019-04-27 09:51:56 · 1384 阅读 · 0 评论 -
互斥锁 synchronized分析
开头:互斥锁是为了保证同一个方法同时间只有一个线程去执行,这个也是在多线程开发当中最基本的实现。在java体系当中有很多方法可以实现目的,如: synchronized ,lock ,redis分布式锁,zk分布式锁,基于数据库实现悲观锁等等。 本文将介绍synchronized这个java原生支持的互斥锁。简易的锁模型我们把一段需要互斥的代码称为:临界区。 当线程需要进入临界区的时候,线...原创 2019-04-21 13:01:26 · 1297 阅读 · 0 评论 -
java多线程---基础入门
1. 线程概述进程(Process)代表运行中的程序。一个运行中的java程序就是一个进程。从操作系统的角度来看,线程(Thread)是进程中可独立执行的子任务。一个进程可以包含多个线程,同一进程中的线程共享该进程所申请到的资源,如内存空间,文件句柄等。从jvm的角度来看,线程是进程中的一个组件(Compoent),它可以看作执行java代码的最小单位。java程序中的任何一段代码总是执行在一个...原创 2019-03-14 11:30:30 · 222 阅读 · 0 评论 -
jstack线程分析
查看CPU信息top使用jstack 导出信息jstack 7930 >7930.txttop 查看某个进程中的线程运行情况top -p 7930 -H将十进制数转成十六进制数printf "%x" 8247结果为 2037打开jstack 导出的文件 查看线程信息文件中已经标出是哪段代码有问题死锁日志...原创 2019-01-14 13:53:14 · 286 阅读 · 0 评论 -
jmap 和 mat内存分析
jamp介绍jmap命令(Java Memory Map)是其中之一。主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节。使用jmap -dump:format=b,file=dump.hprof 1722可以将内存信息导出mat一个内存分析软件使用查看对象创建了多少次。...原创 2019-01-11 15:32:20 · 1359 阅读 · 0 评论 -
CountDownLatch分析
1. CountDownLatch是什么?CountDownLatch是一个java.util.concurrent包下的一个类。用来在多线程开发的时候,让线程之前相互配合的一个类。 它可以让一个线程等待其他的线程运行结束后在执行。它的工作方式就是一个计数器,在初始化的时候给一个数,每执行完一个线程就让这个数减一,直到为0 的时候 ,让等待的那个线程运行。2. CountDownLatch...原创 2018-12-21 15:07:17 · 128 阅读 · 0 评论