ReentrantLock实现原理

1 synchronized和lock 1.1 synchronized的局限性 synchronized是java内置的关键字,它提供了一种独占的加锁方式。synchronized的获取和释放锁有JVM实现,用户不需要显式的释放锁,非常方便,然而synchronized也有一定的局限性,例如: 1 ... »

并发请求 + 事务嵌套 + 更新数据 = 死锁

今有幸为同事排查死锁问题。 问题描述:一个get接口,内依据参数执行select ... for update,未考虑并发场景,导致程序死锁,且只要并发请求该接口,几乎百发百中。 问题定位: 1.检测数据库死锁情况,结果无。 2.接口内无相关共享资源,不会死锁 3.由于从事许久事务方面工作,所以想到 ... »

Python多线程编程,线程锁

多线程threading 模块创建线程创建自己的线程类线程通信线程同步互斥方法线程锁@需要了解!!! 多线程 什么是线程? 线程也是一种多任务的编程方法,可以利用计算机多核资源完成程序的并发运行。 线程又被称为轻量级进程 线程的特征 线程是计算机多核分配的最小单位 一个进程可以包含多个线程 线程也是 ... »

Android通用简洁的下载器

下载逻辑在android开发中可谓很常见,那么封装一个通用简洁的下载器时很有必要的。如果不想给工程引入一个很重的jar包那么可以直接复用下面的代码即可。 主要对外接口 构造函数 : public CommonDownloader(String saveDir, int timeoutMs) 开始下载 ... »

Java并发之线程池ThreadPoolExecutor源码分析学习

线程池学习 以下所有内容以及源码分析都是基于JDK1.8的,请知悉。 我写博客就真的比较没有顺序了,这可能跟我的学习方式有关,我自己也觉得这样挺不好的,但是没办法说服自己去改变,所以也只能这样想到什么学什么了。 ​ 池化技术真的是一门在我看来非常牛逼的技术,因为它做到了在有限资源内实现了资源利用的最 ... »

java多线程系列:Semaphore和Exchanger

本篇文章将介绍Semaphore和Exchanger这两个并发工具类。 Semaphore 信号量 (英语:Semaphore)又称为 信号标 ,是一个同步对象,用于保持在0至指定最大值之间的一个计数值。当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一;当线程完成一次对se ... »

【并发编程】Future模式及JDK中的实现

1.1、Future模式是什么 先简单举个例子介绍,当我们平时写一个函数,函数里的语句一行行同步执行,如果某一行执行很慢,程序就必须等待,直到执行结束才返回结果;但有时我们可能并不急着需要其中某行的执行结果,想让被调用者立即返回。比如小明在某网站上成功创建了一个账号,创建完账号后会有邮件通知,如果在 ... »

Java 多线程(五)之 synchronized 的使用

并发编程为我们带来了很多便利, 但同时也带来了线程安全问题。 线程安全 线程安全性的定义: 当多个线程访问某一个类时, 这个类始终能表示出正确的行为, 那么就称这个类是线程安全的。 其产生的原因可以归结如下: 1.共享数据: 只有共享的数据才会产生带来安全性问题。 如果是方法内部声明的变量, 其是在 ... »

java多线程系列:通过对战游戏学习CyclicBarrier

CyclicBarrier是java.util.concurrent包下面的一个工具类,字面意思是可循环使用(Cyclic)的屏障(Barrier),通过它可以实现让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,所有被屏障拦截的线程才会继续执行。 这篇文章将介绍Cycl ... »

java多线程系列:CountDownLatch

这篇文章将介绍CountDownLatch这个同步工具类的基本信息以及通过案例来介绍如何使用这个工具。 CountDownLatch是 包下面的一个工具类,可以用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 它可以允许一个或者多个线程等待其他线程完成操作。 案例 模拟 ... »

Java 多线程(四)之守护线程(Daemon)

定义 Java 中有两种线程: 一种是用户线程(User Thread),一种是守护线程(Daemon Thread)。 守护线程是一种特殊的线程, 它的特殊有“陪伴”的含义, 当线程中不存在非守护线程时, 则守护线程自动销毁。 垃圾回收线程就是一种守护线程, 当线程中没有非守护线程了, 则垃圾回收 ... »

强如 Disruptor 也发生内存溢出?

OutOfMemoryError 问题相信很多朋友都遇到过,相对于常见的业务异常(数组越界、空指针等)来说这类问题是很难定位和解决的。 本文以最近碰到的一次线上内存溢出的定位、解决问题的方式展开;希望能对碰到类似问题的同学带来思路和帮助。 ... »

设计一个死锁

死锁的定义 在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统 的处理能力。然而,多个进程的并发执行也带来了新的问题——死锁。所谓死锁是指多个进 程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。下面我们通过一些实例来说明死锁现象。先看生活中 ... »

Java 多线程(二)之线程状态及其验证

线程状态 Thread.State 状态类型 在指定的时间点, 一个线程有且只有一种状态。 这些状态是 JVM 的状态, 他们并没有反映操作系统的状态。 定义 Thread 的状态是定义在 Thread 内部的枚举类型。 在定义中, 我们知道共有 6 种类型。 说明 | 状态 | 说明 | | | ... »

Java 多线程(二)之 Thread 优先级

Thread 中线程优先级相关属性 每个线程均有优先级,在 Thread 中, 与优先级对应的属性如下: 相关函数 在此只讨论 Thread 类中的。 优先级初始化 init() 函数对优先级进行了初始化。并调用 setPriority(priority) 函数进行设置。从中得知, 线程的优先级是继 ... »

什么样的简历不会被丢进回收站

从去年校招开始到现在负责部门的面试,从我手上流走的简历多多少少也有上百封了。 同时最近秋招又要开始了,就想着把我这一年来筛选简历的经验分享给大家,多少还是能提高一些命中率。 ... »

C# ConcurrentBag的实现原理

[TOC] 一、前言 笔者最近在做一个项目,项目中为了提升吞吐量,使用了消息队列,中间实现了 生产消费模式 ,在生产消费者模式中需要有一个集合,来存储生产者所生产的物品,笔者使用了最常见的 集合类型。 由于生产者线程有很多个,消费者线程也有很多个,所以不可避免的就产生了线程同步的问题。开始笔者是使用 ... »

C#多线程编程系列(五)- 使用任务并行库

[TOC] 本系列首页链接: "[C 多线程编程系列(一) 简介" ] 1.1 简介 在之前的几个章节中,就线程的使用和多线程相关的内容进行了介绍。因为线程涉及到异步、同步、异常传递等问题,所以在项目中使用多线程的代价是比较高昂的,需要编写大量的代码来达到正确性和健壮性。 为了解决这样一些的问题,在 ... »

java synchronized 关键字原理

Synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式: 同步普通方法,锁的是当前对象。同步静态方法,锁的是当前 Class 对象。同步块,锁的是 {} 中的对象。 实现原理: JVM 是通过进入、退出对象监视器( Monitor )来实现对方法、同步块的同步的。 具体实现是 ... »