
并发多线程
研发之道
一个坚持把架构做到极致的技术人,热衷于互联网技术。混迹互联网十几年,热衷于高性能、高并发、分布式技术领域的研究。
展开
-
java AtomicInteger 源码之CAS
乐观锁与悲观锁当一个线程被挂起时,加入到阻塞队列,在一定的时间或条件下,在通过notify(),notifyAll()唤醒回来。在某个资源不可用的时候,就将cpu让出,把当前等待线程切换为阻塞状态。等到资源(比如一个共享数据)可用了,那么就将线程唤醒,让他进入runnable状态等待cpu调度。这就是典型的悲观锁的实现。独占锁是一种悲观锁,synchronized就是一种独占锁,它假设最坏的情况,并原创 2017-02-04 22:04:58 · 576 阅读 · 0 评论 -
深入剖析Netty源码设计(一)——深入理解select poll epoll机制
前言打算输出一系列Netty源码分析与实践的文章,也作为后端开发学习过程中的沉淀,此文章为第一篇,从操作系统底层的IO讲起,为Netty 的出场做下知识准备。一些概念文件描述符文件描述符在形式上是一个非负整数。实际上,它是一个索引值,指向为每一个进程所维护的该进程打开文件的记录表。当程序打开一个现有文件或者创建一个新文件时,内核向进程返回一个文件描述符。读写文件也需要使用文件描述符来指定待...原创 2019-01-24 10:51:08 · 4551 阅读 · 0 评论 -
select、poll、epoll、同步、异步之间的区别总结[整理]
select,poll,epoll都是IO多路复用的机制。I/O多路复用就通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。但select,poll,epoll本质上都是同步I/O,因为他们都需要在读写事件就绪后自己负责进行读写,也就是说这个读写过程是阻塞的(可能通过while循环来检测内核将数据准备的怎么样了, 而不是属于内核的一种通知原创 2017-03-24 13:08:58 · 11002 阅读 · 1 评论 -
关于事务、ThreadLocal应用、CompletionService的一些总结
一、ThreadLocal的本质:Thread 类组合一个ThreadLocal.ThreadLocalMap 所以ThreadLocalMap 是ThreadLocal 的内部类, ThreadLocalMap 是ThreadLocal 自己实现的一个key、value map结构,初始化Entry 长度16、其中key 基于弱引用。key 是 一个ThreadLocal 实例。所以单纯的说T原创 2017-07-21 16:29:27 · 1289 阅读 · 0 评论 -
Java 多线程拷贝文件夹并调用tinyPng算法接口压缩图片实现(生产消费变种)
线程模型生产者Provider线程为一,主要进行深搜目录文件;、消费者Consumer线程多个, 因为RPC服务调用时延较长, 启用多个线程请求服务。持久化线程Persist 将已经消费的消息存放在writeQueue, 启用一个线程从writeQueue取数据进行持久化到log.pic,这样每次启动压缩的时候,可以避免重复消费。 进而避免同一目录进行多次压缩api_key.properti原创 2017-03-22 21:08:22 · 1783 阅读 · 0 评论 -
深入分析wait/notify为什么要在同步块内
public class WaitNotifyCase { public static void main(String[] args) { // final Object lock = new Object(); final Lock lock = new ReentrantLock(); new Thread(new Runnable() {原创 2017-03-13 11:28:51 · 13687 阅读 · 8 评论 -
深入剖析ReentrantLock公平锁与非公平锁源码实现
本文以公平与非公平锁的加锁缩成为主线,分析整个加锁过程。准备知识简介ReentrantLock类图: NonfairSync继承关系: Node结点:作为获取锁失败线程的包装类, 组合了Thread引用, 实现为FIFO双向队列。 下图为Node结点的属性描述 锁的创建非公平锁(默认)final ReentrantLock lock = new ReentrantL原创 2017-03-19 15:29:40 · 23975 阅读 · 34 评论 -
Java NIO浅析
原文地址:http://tech.meituan.com/nio.htmlNIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、I/O处理问题的有效方式。那么NIO的本质是什么样的呢?它是怎样与事件模型结合来解放线程、提高系统吞吐的呢?转载 2017-02-03 22:50:32 · 378 阅读 · 0 评论 -
译 -- Java 并发编程(多线程)一 | Callable and Future | CountDownLatch | Runable
Introduction并行计算是一种计算的形式, 一些计算被并行的执行而不是串行。 Java 语言通过线程的使用被设计为支持并发编程。对象和资源能够被多线程访问, 每个线程能够在程序中潜在的访问任何对象, 并且程序设计者在多线程中必须确保读和写的对象访问被正确的同步。ExamplesCallable and Future虽然Runnable 提供了一种包裹要被在一个不同的线程中执行的代码的方式。它翻译 2017-01-17 17:42:03 · 1585 阅读 · 0 评论 -
译 -- Java 并发编程(多线程)二 | Producer-Consumer | Get status of all threads | deadlocked
接着 译 – Java 并发编程(多线程)一创建基本的死锁系统当两个竞争动作都在等待对方完成时出现死锁, 因此都不会完成工作,在java中每个对象都关联一把锁, 为了避免多个线程在单个对象上并发的做修改, 我们能够使用synchronized 原语, 但是一切都将会带来消耗, 错误的使用synchronized 原语将会导致“卡死”系统, 称之为死锁。考虑有两个线程工作在一个实例上, 把线程叫做F翻译 2017-01-17 19:57:47 · 548 阅读 · 0 评论 -
译 -- Java 并发编程(多线程)三 | Semaphore | ThreadLocal | synchronized
接着上一篇译 – Java 并发编程(多线程)二 原文地址:http://stackoverflow.com/documentation/java/121/concurrent-programming-threads#t=201701170653119627647 Synchronization在Java中, 有一个内置语言级别的锁机制:synchronized 块, 它使用任何的java对象作翻译 2017-01-18 14:57:30 · 395 阅读 · 0 评论 -
JDK 1.8 ConcurrentHashMap 源码剖析
转载两篇不错的文章:第一篇:前言HashMap是我们平时开发过程中用的比较多的集合,但它是非线程安全的,在涉及到多线程并发的情况,进行put操作有可能会引起死循环,导致CPU利用率接近100%。final HashMapString, String> map = new HashMapString, String>(2);for (int i = 0; i 10000转载 2017-02-04 22:53:27 · 8900 阅读 · 18 评论 -
深入剖析 Netty 源码设计(二)——BIO NIO AIO Reactor 模式到底干了啥
本文首发于 点击转到原文前言周末向往常一样睡了一上午,惆怅了一个中午,下午学了会习,梳理了下Netty的线程模型是如何体现Reactor模式的。继上一篇对一些通信底层IO的C函数学习,这一篇主要是总结Java里对底层IO不同层次的抽象,每一层都为了解决什么问题?为什么Reator模型使得现在Netty处理网络IO时如此高效?带着问题,我们一起来学习。BIO让我们先回忆一下传统的服务器端同步...原创 2019-01-28 12:35:49 · 972 阅读 · 1 评论