
java基础
一个读书人
这个作者很懒,什么都没留下…
展开
-
java 并发HelloWorld之AQS HelloWorld
今天聊一聊什么是AQS,并用他实现一个简单的锁。它是java.util.concurrent.locks.AbstractQueuedSynchronizer是一个抽象类,juc很多工具都是基于它的,它是juc的核心它实现的是非系统级别的锁的一个框架有别于synchronized关键词,系统级别的锁(synchronized)对于锁的竞争切换的时候消耗资源比较大因为要调用系统级别的api还要...原创 2019-06-09 20:40:37 · 185 阅读 · 0 评论 -
Java NIO Zero Copy 零拷贝分析
上图描述的是不使用零拷贝,从磁盘读数据然后进行一个循环之后再写到磁盘或者网络的操作首先我们JVM所在的用户空间(User Space)调用一个读的native方法,它肯定是操作了系统的某些api,向内核控件发送了一个请求,然后就会进行上下文切换到内核空间(Kemel Space) ,然后内核空间就会把我们存在网络上或者说是硬盘里的数据通过一种叫Direct Memory Access读到内核...原创 2019-03-27 18:06:32 · 346 阅读 · 0 评论 -
java多线程之原子性
1.1原子性假定有两个线程A和B,他们要操作一个变量C,当A操作C的时候B不操作或者说是无法操作B,那么就说名 操作C的操作是原子的,也是线程安全的例子:UnSafeprivate static int anInt = 1; public static void main(String[] args) { new Thread(()->{anInt++;})....原创 2019-04-04 19:27:39 · 547 阅读 · 0 评论 -
java多线程之线程封闭
当访问公共变量的时候就需要同步才能线程安全。线程封闭就可以免去同步操作就可以实现线程安全。常见的应用场景:在JDBC中的Connection对象并不是线程安全的。在典型的Servlet应用中,请求是同步的,请求直接使用用Connection对象访问数据库,使用完再返回给链接池给下一个请求使用,并且在链接返回之前不会给其他线程使用。这种方式就叫做线程封闭技术java里面推荐使用线程封闭方法...原创 2019-04-04 19:26:45 · 259 阅读 · 1 评论 -
java多线程之死锁wait()notify()notifyAll()锁池等待池错误的唤醒
死锁如何出现: 互相拿到对方的锁,循环等待,或者出现全体对象wait,没有人唤醒他们,俗称全员等待等待再等待。互相拿到对方锁的例子public class DieLock { static void fun1(){ while (true){ synchronized (String.class){ Sys...原创 2019-04-04 19:26:02 · 1017 阅读 · 0 评论 -
java多线程之可重入
重入的一种实现方法是,为每一个锁加一个计数,但这个数等于0时,就代表没有任何线程获取这个锁,当这个锁被获取时就加1,如果再次被这个线程获取这个锁就再加1,这样就可以实现锁的嵌套synchronized是JVM提供给我们的一个同步操作的关键词,如果不是可重入锁下面的例子必然发生死锁public class ReentryLock { public static synchronized...原创 2019-04-04 19:25:06 · 239 阅读 · 0 评论 -
java多线程之简单的线程池
package com.guo.threadreadbattcn;import java.util.ArrayList;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.concurrent.Executor;import java.util.str...原创 2019-04-04 19:24:20 · 138 阅读 · 0 评论 -
java多线程之对象发布this引用溺出
java并发编程实践书中,this引用逃逸("this"escape)是指对象还没有构造完成,它的this引用就被发布出去了。这是危及到线程安全的,因为其他线程有可能通过这个逸出的引用访问到“初始化了一半”的对象(partially-constructed object)。这样就会出现某些线程中看到该对象的状态是没初始化完的状态,而在另外一些线程看到的却是已经初始化完的状态,这种不一致性是不确定的...原创 2019-04-04 19:23:01 · 605 阅读 · 0 评论 -
java多线程之volatile内存可见性
操作系统的内存大致可以看成主存(内存条上的内存),cpu的缓存。当多个核心访问主存中的变量时,需要把主存中的值拷贝的每个核心的cpu缓存上,每个核心的缓存之间互相是不可见的,当修改的时候需要把值刷新到主存上其他的线程才看的到,在底层其实还有更多的操作,我只是简单的说了一下。JVM已经帮我们封装了很多操作,但还不够所有有了 volatile 这个关键词,可以保持变量的可见性使用同步锁的方法来操作...原创 2019-04-04 19:21:32 · 238 阅读 · 0 评论 -
关于“《T extends Comparable《?super T》》”怎么理解的问题
配图1、只有实现Compareable接口的类或者它的父类实现了才合法2、Comparable<? super T>>: 如果Comparable的下界为T,比如A是父类B是子类,A实现了Comparable,那么传入B时,就可以看成<B extends Comparable< ?super B >>:表示只有B的父类或者自己实现了Compare...原创 2018-11-25 19:47:01 · 314 阅读 · 0 评论