最近抽时间把JVM运行过程中产生的一些线程进行了整理,主要是围绕着我们系统jstack生成的文件为参照依据。 前段时间因为系统代码问题,造成性能到了天花板,于是就dump…
分类:java并发
Java并发编程的艺术(十)——线程池(1)
线程池的作用 减少资源的开销 减少了每次创建线程、销毁线程的开销。 提高响应速度 每次请求到来时,由于线程的创建已经完成,故可以直接执行任务,因此提高了响应速度。 提高线程的可管理性 线程是一种稀缺资源,若不加以限制,不…
Java多线程学习笔记(三)——Future和FutureTask
Future接口:它是对于具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果。必要时可以通过get方法获取执行结果,该方法会阻塞直到任务返回结果。 接口中有5中方法: cancel(…
实现高效的数据库连接池(附带完整代码C#和Java实现)(转)
相关技术: 连接池 引用记数 多线程 C#.Net Java 适宜人群 数据库应用程序程序员 系统分析员 模块设计师 有一定功底的程序员 目录 引言 数据库连接池(Connection Pool)的工作原理 连接池关键问…
Java多线程产生死锁的条件以及解决方法
摘自《Thinking in Java》: 死锁产生的原因: 1.互斥条件。任务使用的资源至少一个是不能共享的。 2.至少有一个任务它必须持有一个资源且正在等待获取一个当前被别的任务持有的资源。 3.资源不能被任务抢占。…
Jdk1.6 JUC源码解析(9)-CountDownLatch
Jdk1.6 JUC源码解析(9)-CountDownLatch 作者:大飞 功能简介: CountDownLatch是一种锁,称为闭锁。可以让一个或多个线程等待另外一个或多个线程执行完毕后再执行。 Cou…
FutureTask源码解析(1)——预备知识
前言 FutureTask 是一个同步工具类,它实现了Future语义,表示了一种抽象的可生成结果的计算。在包括线程池在内的许多工具类中都会用到,弄懂它的实现将有利于我们更加深入地理解Java异步操作实现。 在分析它的源…
,Java线程Callable_Future_Executors线程池的使用
1.首先创建任务,继承callable接口能返回结果。 package com.currentPro.task; import java.util.concurrent.Callable; public class Mu…
JAVA死锁的写法
在java开发中,避免不了要加锁控制程序逻辑,但加锁有可能导致死锁,造成线程永远卡死在等待释放锁,后面的代码得不到执行; 在java里,一般是通过synchronized关键字加锁,在jdk1.5版本中新增了L…
如何在高并发环境下设计出无锁的数据库操作(Java版本)
一个在线2k的游戏,每秒钟并发都吓死人。传统的hibernate直接插库基本上是不可行的。我就一步步推导出一个无锁的数据库操作。 1. 并发中如何无锁。 一个很简单的思路,把并发转化成为单线程…
JUC之AQS
AQS是同步框架,它进行两个方面的工作:资源的管理和资源申请者的管理。对应由两部分组成:一个volatile int state(代表共享资源)和一个FIFO线程等待队列(多线程争用资源被阻塞时会进入此队列)。state…
JUC源码——ConcurrentHashMap(1.8)
1.8以前用分段锁实现 static class Segment<K, V> extends ReentrantLock implements Serializable { fin…