
JDK
smileChenjx
这个作者很懒,什么都没留下…
展开
-
死锁例子
Java产生死锁的一个简单例子思路是创建两个字符串a和b,再创建两个线程A和B,让每个线程都用synchronized锁住字符串(A先锁a,再去锁b;B先锁b,再锁a),如果A锁住a,B锁住b,A就没办法锁住b,B也没办法锁住a,这时就陷入了死锁。直接贴代码:复制代码public class DeadLock {public static String obj1 = “obj1”;pub...原创 2019-01-22 10:31:06 · 1609 阅读 · 0 评论 -
JDK源码阅读
Object1) wait(), notify(), notifyAll(), wait(timeout)2) hashCode(), equals()3) clone()hashCode(), equals()关系: 因为重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么h...原创 2019-02-22 09:57:41 · 234 阅读 · 0 评论 -
AQS详解
一、概述谈到并发,不得不谈ReentrantLock;而谈到ReentrantLock,不得不谈AbstractQueuedSynchronizer(AQS)!类如其名,抽象的队列式的同步器,AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch…。以下是本文的目录大纲: 概述 ...转载 2019-01-22 11:25:28 · 209 阅读 · 0 评论 -
JUC回顾之-CyclicBarrier底层实现和原理
1.CyclicBarrier 字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是让一组线程到达一个屏障(同步点)时被阻塞,直到最后一个线程到达屏障时候,屏障才会开门。所有被屏障拦截的线程才会运行。2.常用的方法:复制代码CyclicBarrier(int parties)创建一个新的 CyclicBarrier,它将在给定数量的参与者(线程)处于等待状态时启动,...转载 2019-01-22 10:47:36 · 1579 阅读 · 0 评论 -
java共享锁实现原理及CountDownLatch解析
java共享锁实现原理及CountDownLatch解析前言前面介绍了ReentrantLock,又叫排他锁,本篇主要通过CountDownLatch的学习来了解java并发包中是如何实现共享锁的。CountDownLatch使用解说CountDownLatch是java5中新增的一个并发工具类,其使用非常简单,下面通过伪代码简单看一下使用方式:这里写图片描述这是一个使用CountDo...转载 2019-01-22 10:30:45 · 117 阅读 · 0 评论 -
static执行顺序
1、static定义的变量和静态代码块,根据编写顺序先后执行package com.study;public class ClassWithStatic {public static void main(String[] args) {System.out.println(“public static void main(String[] args)”);Super.getInstanc...原创 2019-01-26 16:09:14 · 540 阅读 · 1 评论 -
Java锁有哪些种类,以及区别(转)
在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类。介绍的内容如下:公平锁/非公平锁可重入锁独享锁/共享锁互斥锁/读写锁乐观锁/悲观锁分段锁偏向锁/轻量级锁/重量级锁自旋锁上面是很多锁的名词,这些分类并不是全是指锁的状态,有的指锁的特性,有的指锁的设计,下面总结的内容是对每个锁的名词进行一定的解释。公平锁/非公平锁公平锁是指多个线程按照申请锁...转载 2019-01-25 10:57:37 · 127 阅读 · 0 评论 -
Java GC日志查看
Java中的GC有哪几种类型?参数描述UseSerialGC虚拟机运行在Client模式的默认值,打开此开关参数后,使用Serial+Serial Old收集器组合进行垃圾收集。UseParNewGC打开此开关参数后,使用ParNew+Serial Old收集器组合进行垃圾收集。UseConcMarkSweepGC打开此开关参数后,使用ParNew+CMS+Serial Old收...转载 2019-01-24 20:40:41 · 377 阅读 · 0 评论 -
Java -verbose:gc 命令
Java -verbose:gc 命令JVMGC垃圾回收Java虚拟机Java -verbose:gc 中参数-verbose:gc 表示输出虚拟机中GC的详细情况.使用后输出如下:[Full GC 168K->97K(1984K), 0.0253873 secs]解读如下: 箭头前后的数据168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容量,说明有168K-97...原创 2019-01-24 20:38:47 · 504 阅读 · 0 评论 -
JVM中垃圾收集器 serial、parNew、parallel Scavenge;serial old、parallel old、CMS、G1
serial收集器:单线程,“stop the world”,进行垃圾收集线程时必须停止所有工作线程;parNew收集器(parallel并行):多线程,进行垃圾收集时也会停止工作线程;两者都能与CMS(concurrent mark sweep)收集器配合使用;三者都关注尽可能缩短垃圾收集时用户线程的停顿时间。并行(parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待...转载 2019-01-24 11:41:52 · 910 阅读 · 0 评论 -
线程不安全
package com.study;import java.util.concurrent.CountDownLatch;public class ThreadUnsafe {private static int num =0;private static void inc(){ for(int i=0;i<100;i++){ num++; t...原创 2019-01-18 15:12:38 · 123 阅读 · 0 评论 -
Java多线程中的notify和notifyAll的区别
既然说到多线程,首先要引入几个概念。1、锁池:直白的说就是等待竞争锁的池子,比如当前竞争的对象的锁已经被其中一个线程取得,其他线性等待锁释放后开始竞争,这些等待的线程总和我们就可以叫锁池。2、等待池:某个线程调用了某个对象的wati()方法,释放了锁,进入不竞争锁的状态。我们可以说这个线程进入了等待池。区别如果线程调用了对象的 wait()方法,那么线程便会处于该对象的等待池中,等待池...原创 2019-02-12 17:40:44 · 462 阅读 · 0 评论