Java并发
买糖买板栗
java
展开
-
使用阿里云aliyun-oss-java-sdk的 getObject方法返回的输入流未主动释放 导致http连接泄漏的线上问题排查
项目功能:基于netty的数据传输服务,接收客户端数据,存在本地磁盘;定时任务,定时处理本地的文件,并上传到阿里云OSS线上问题:运维监控发现过去半个小时都没有记录写入到DB(因为我们每上传到OSS一次会DB记一条记录)问题排查过程:1、运维将实时的进程的dump文件拷贝出来2、使用mat工具分析dump文件(mat介绍:https://www.cnblogs.com/trust-free...原创 2019-12-03 16:50:36 · 2728 阅读 · 0 评论 -
生产环境如何使用java线程池
ThreadPoolExecutor谁都会用,但是如何用的好、用的对,可能就仁者见仁、智者见智~吹之前,还是把ThreadPoolExecutor简单介绍一下: public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, ...原创 2018-12-09 15:06:44 · 3241 阅读 · 0 评论 -
ThreadPoolExecutor中的RejectedExecutionHandler浅析
当ThreadPoolExecutor中的线程都已经忙于执行,且有界队列也满了,这个时候就需要自己写reject策略;此处给一个demo,供大家去理解和参考:1、先写一个可执行的线程package zhengchao_001_005.ThreadPoolExecutor;public class Task implements Runnable{ private int id ;原创 2017-10-26 22:29:33 · 1032 阅读 · 0 评论 -
测试 ThreadPoolExecutor 中遇到的近似死锁问题
今天在做一个简单的小test时,发现了ThreadPoolExecutor的一个问题,先列出代码:主要功能是往一个链接中插入、删除数据链表的节点:public class BoundedNode { public Object value; public BoundedNode next; public BoundedNode(Object x){原创 2017-06-12 20:36:07 · 1802 阅读 · 0 评论 -
java中的CAS
原文链接:http://www.jianshu.com/p/fb6e91b013cc作者:占小狼前言CAS,Compare and Swap即比较并替换,设计并发算法时常用到的一种技术,Doug lea大神在java同步器中大量使用了CAS技术,鬼斧神工的实现了多线程执行的安全性。目前的处理器基本都支持CAS,只不过不同的厂家的实现不一样罢了。CAS转载 2017-02-20 15:04:11 · 1014 阅读 · 0 评论 -
java.util.concurrent包详解:CyclicBarrier和CountDownLatch
CountDownLatch是减计数方式,计数==0时释放所有等待的线程;CountDownLatch当计数到0时,计数无法被重置;CountDownLatch每次调用countDown()方法计数减一,调用await()方法只进行阻塞,对计数没任何影响;代码:package Concurrent;import java.util.concurrent.CountDownLatch;原创 2017-01-19 16:35:52 · 1038 阅读 · 0 评论 -
java.util.concurrent.atomic详解
1、先看下整体的结构:2、单词解释:atomically:原子级的3、整体解释:支持在单个变量上解除锁定的线程安全编程包。即使用者无需进行安全的操作,其能自动保证线程安全。举例1:AtomicLong:多线程操作AtomicLong对象,提供原子操作的Integer类。每次取得对象的值,并加一(调用其getAndIncrement()方法),运行结果可知其是原创 2017-01-17 18:12:52 · 992 阅读 · 0 评论 -
Fork/Join框架介绍 顺便测试jvm的内存溢出问题
1. 什么是Fork/Join框架Fork/Join框架是Java7提供了的一个用于并行执行任务的框架, 是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架。我们再通过Fork和Join这两个单词来理解下Fork/Join框架,Fork就是把一个大任务切分为若干子任务并行的执行,Join就是合并这些子任务的执行结果,最后得到这个大任务的结果。比如计算1+原创 2016-11-15 11:37:58 · 3989 阅读 · 0 评论 -
java实现生产者消费者
1、仓库类package Thread_test.ProducerAndConsumer;import java.util.LinkedList;/** * * @author zhengchao */public class CangKu { private final LinkedList list; private static final原创 2016-11-02 18:05:09 · 417 阅读 · 2 评论 -
Thread和Runnable的真正区别
很多初学者在被问到,Thread和Runnable的区别时,都会说,一个是继承、一个是实现接口,java是单继承、多接口,正常情况下使用Runnable好一点,相信很多人都会这么说。我们先来看描述:1. 通过继承Thread类,重写Thread的run()方法,将线程运行的逻辑放在其中2. 通过实现Runnable接口,实例化Thread类看到没?1中说了重写Thread的原创 2016-10-08 18:28:35 · 749 阅读 · 1 评论 -
java 读写锁 ReadWriteLock
1、需要操作的共享对象,银行卡,大家都网购,用这张卡package Thread_readWriteLock;public class ShareAccount { private String oid; //账号 private int cash; //账户余额 ShareAccount(Str原创 2016-11-03 11:23:44 · 539 阅读 · 1 评论 -
Lock为什么比synchronized 能更好的实现同步访问
synchronized是java中的一个关键字,也就是说是Java语言内置的特性。那么为什么会出现Lock呢? 如果一个代码块被synchronized修饰了,当一个线程获取了对应的锁,并执行该代码块时,其他线程便只能一直等待,等待获取锁的线程释放锁,而这里获取锁的线程释放锁只会有两种情况: 1)获取锁的线程执行完了该代码块,然后线程释放对锁的占有; 2)线程执行发转载 2016-10-10 14:36:53 · 4168 阅读 · 0 评论 -
java synchronized 使用
synchronized 的语法:synchronized 可以作为一个method的修饰符,也可以一段代码里出现,先说在代码里出: 其语法是 synchronized(xx) { //your code } 这个xx需要是一个Object,只要是一个Object就行,如: String s="haha"; synch原创 2016-07-13 11:09:09 · 470 阅读 · 0 评论