自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白夜行悟空

日光之下,并无新事。

  • 博客(29)
  • 资源 (2)
  • 收藏
  • 关注

转载 二十七、并发编程之并发工具类CountDownLatch详解

谁谁

2018-12-28 18:45:29 611

转载 使用了框架iframe的页面如何跳出框架

一句话,javascript中使用window.top.location="url"即可。1.小知识:“window.location.href”、"location.href"是本页面跳转.“parent.location.href” 是上一层页面跳转.“top.location.href” 是最外层的页面跳转.2.举例说明:如果A,B,C,D都是html,D是C的iframe,...

2018-12-27 11:47:09 462

转载 SpringMVC实现账号只能在一处登陆

一、问题引导在Web开发中,实现一个账号只能在一处登陆有两种形式:1.当某个账号在某处登陆后,如果再在其他处登陆,将前一个账号挤掉;2.当某个账号登陆后,此账号在其他设备登陆提示已经登陆,无法登陆。正常的应用逻辑第一种应用较为广泛,因此此篇文章讨论一下第一种逻辑在spring mvc开发中一种较为简单的实现方式。然而在没有长连接如WebSocket或者异步请求轮询的情况下,我们之前登陆...

2018-12-27 11:42:45 496

转载 二十五、并发编程之join应用与实现原理剖析

1、join有什么用呢?当一个线程正在进行中的时候,如果我们想调用另外一个线程的话,这时我们可以使用join。2、join方法的底层原理,简单来说就是,join方法能把所调用join方法的线程进入休眠状态(wait()),等执行完joinThread线程之后,会自动调用notifyAll方法叫醒所有处于wait状态的线程。看过AQS的朋友,应该很容易理解join方法。但是有一点是,能用j...

2018-12-20 15:32:17 156

原创 二十四、并发编程之简易数据连接池

public class MyDataSource { private LinkedList<Connection> pool = new LinkedList(); //链表放连接池用 private static final int INIT_CONNECTIONS = 10;//初始化连接数 private static final String DRIVER_CLASS...

2018-12-20 15:00:59 147

转载 二十三、并发编程之深入解析Condition源码

一、Condition简介1、Object的wait和notify/notifyAll方法与Condition区别任何一个java对象都继承于Object类,在线程间实现通信的往往会应用到Object的几个方法,比如wait(),wait(long timeout),wait(long timeout, int nanos)与notify(),notifyAll()几个方法实现等待/通知机制。...

2018-12-19 19:34:59 472

原创 二十二、并发编程之使用Condition实现一个先入先出的有界队列

//先入先出队列public class MyQueue<E> { private Object[] obj;//数组(队列) private int addIndex;//添加角标 private int removeIndex;//移除脚标 private int queueSize;//队列长度 private Lock lock = new ReentrantLoc...

2018-12-19 14:02:46 333

原创 二十一、使用Condition重写waitnotify生产者消费者模型案例

//生产者public class PushTarget implements Runnable{ private Tmail tmail;//销售平台 public PushTarget(Tmail tmail) { this.tmail = tmail; } @Override public void run() { while(true) {//无限循环 tmail...

2018-12-19 12:03:41 295

原创 二十、并发编程之Condition的使用

三个线程按顺序循环执行使用线程之间的通信wait、notify写代码public class Demo { private int signal; public synchronized void a() { while(signal != 0 ) {//signal等于0打印a try { wait();//等待 } catch (InterruptedExc...

2018-12-19 12:01:59 193

原创 十九、并发编程之通过生产者消费者模型理解等待唤醒机制

生产者//生产者public class PushTarget implements Runnable{ private Tmail tmail;//销售平台 public PushTarget(Tmail tmail) { this.tmail = tmail; } @Override public void run() { while(true) {//无限循环 ...

2018-12-18 16:55:44 185

转载 十八、并发编程之线程之间的通信之wait、notify

一、线程的几种状态线程有四种状态:1.产生(New):线程对象已经产生,但尚未被启动,所以无法执行。如通过new产生了一个线程对象后没对它调用start()函数之前。2.可执行(Runnable):每个支持多线程的系统都有一个排程器,排程器会从线程池中选择一个线程并启动它。当一个线程处于可执行状态时,表示它可能正处于线程池中等待排排程器启动它;也可能它已正在执行。如执行了一个线程对象的...

2018-12-18 13:51:03 129

转载 十七、并发编程之读写锁ReentrantReadWriteLock的锁降级

锁降级锁降级是指写锁降级为读锁。在写锁没有释放的时候,获取到读锁,再释放写锁锁升级(ReentrantReadWriteLock是不支持的。)把读锁升级为写锁在读锁没有释放的时候,获取到写锁,再释放读锁oracle官网的对于锁降级的示例代码: class CachedData { Object data; volatile boolean cacheVal...

2018-12-17 18:54:48 357

转载 十六、并发编程之读写锁认识与原理

一、读写锁认识排他锁(写):在同一时刻只有一个线程可以进入共享锁(读):在同一时刻可以有多个线程同时进入package com.roocon.thread.ta4;import java.util.HashMap;import java.util.Map;import java.util.concurrent.locks.Lock;import java.util.concurr...

2018-12-17 18:03:35 392

原创 十五、并发编程之写自己的公平锁

package com.roocon.thread.ta3;import java.util.ArrayList;import java.util.List;public class FairLock { private boolean isLocked = false; private Thread lockingThread = null; private List<Qu...

2018-12-13 18:00:27 124

转载 十四、并发编程之ReentrantLock公平锁和非公平锁原理详解

一、简介Java语言中有许多原生线程安全的数据结构,比如ArrayBlockingQueue、CopyOnWriteArrayList、LinkedBlockingQueue,它们线程安全的实现方式并非通过synchronized关键字,而是通过java.util.concurrent.locks.ReentrantLock来实现。ReentrantLock的实现是基于其内部类FairSync...

2018-12-13 17:57:05 6028 1

原创 十三、并发编程之使用AQS重写自己的锁

package com.roocon.thread.ta2;import java.util.concurrent.TimeUnit;import java.util.concurrent.locks.AbstractQueuedSynchronizer;import java.util.concurrent.locks.Condition;import java.util.concur...

2018-12-13 15:39:52 323

转载 十二、并发编程之AbstractQueuedSynchronizer(AQS)详解

AbstractQueuedSynchronizer(AQS)详解

2018-12-13 10:16:32 515

原创 十一、并发编程之Lock接口的认识与使用

1、认识2、优势Lock 类似于synchronized,具有相同的互斥性和内存可见性,但是更加灵活,加锁和放锁可以由使用者自己确定,Synchronized不需要显示地获取和释放锁,简单可以方便的实行公平性非阻塞的获取锁能被中断的获取锁,synchronized锁可能出现异常而导致中断,无法释放锁,但是通过使用lock,可以直接将lock放在异常finally中,强制释放锁。超...

2018-12-05 17:40:09 239

原创 十、并发编程之JDK提供的原子类原理及使用

1、简介Atomic一词跟原子有点关系,后者曾被人认为是最小物质的单位。计算机中的Atomic是指不能分割成若干部分的意思。如果一段代码被认为是Atomic,则表示这段代码在执行过程中,是不能被中断的。通常来说,原子指令由硬件提供,供软件来实现原子方法(某个线程进入该方法后,就不会被中断,直到其执行完成)在x86 平台上,CPU提供了在指令执行期间对总线加锁的手段。CPU芯片上有一条引线#HL...

2018-12-05 17:04:13 132

转载 九、并发编程之volatile原理与使用

1、锁两种主要特性:互斥(mutual exclusion) 和可见性(visibility)。互斥:一次只允许一个线程持有某个特定的锁,因此可使用该特性实现对共享数据的协调访问协议,这样,一次就只有一个线程能够使用该共享数据。可见性:它必须确保释放锁之前对共享数据做出的更改对于随后获得该锁的另一个线程是可见的 —— 如果没有同步机制提供的这种可见性保证,线程看到的共享变量可能是修改前的值或...

2018-12-05 15:05:30 167

原创 八、并发编程之重入锁、自旋锁、死锁

1、重入锁重入锁:能够让线程进行重入的锁叫作重入锁,也叫递归锁,在JAVA环境下 ReentrantLock 和synchronized 都是可重入锁。锁重入:某个线程获得一个已经由它自己持有的锁对象,那么这个请求就会成功,即重入。重入是对本线程来说,即本线程多资源可以多次加锁进入,而不会出现阻塞。锁重入现象:1.当进入a方法的时候,线程必须先拿到当前类的实例(锁),这个时候,a的方法内...

2018-12-04 16:28:07 205

原创 七、并发编程之单例问题与线程安全性深入解析

1、饿汉式出现线性安全性问题要满足三个条件:多线程的环境下(满足)、必须有共享资源(满足)、对资源进行非原子性操作(不满足),没有线程安全性问题。public class Singleton { //私有化构造方法 private Singleton() {} //饿汉式 private static Singleton instance = new Singleton(); p...

2018-12-04 15:45:08 148

转载 六、并发编程之偏向锁、轻量级锁、重量级锁

java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开始都是无锁的,随着线程间争夺锁,越激烈,锁的级别越高,并且锁只能升级不能降级。1、java对象头锁的实现机制与java对象头息息相关,锁的所有信息,都记录在java的对象头中。用2字(32位JVM中1字=32bit=4baye)存储对象头,如果是数组类型使用3字存储(还需存储数组长度...

2018-12-04 14:59:29 325

原创 五、并发编程之synchronized保证线程安全的原理

在终端执行以下命令查看class文件的字节码Amy:~ Amy$ cd /Users/Amy/Documents/workplace/project/bin/com/roocon/thread/t3 Amy:t3 Amy$ javap -verbose Sequence.class这里用一个片段讲解:public int getSubOrAdd(); descriptor: ()...

2018-12-04 14:58:00 220

原创 四、并发编程之内置锁(synchronized)

内置锁多线程的锁,其实本质上就是给一块内存空间的访问添加访问权限,因为Java中是没有办法直接对某一块内存进行操作的,又因为Java是面向对象的语言,一切皆对象,所以具体的表现就是某一个对象承担锁的功能,每一个对象都可以是一个锁。内置锁,使用方式就是使用 synchronized 关键字,synchronized 方法或者 synchronized 代码块。1、修饰普通方法public cl...

2018-12-04 14:56:36 155

原创 使用jconsole工具来监控java运行情况

1、jconsole是jdk自带的工具。所以要先安装jdk2、jconsole工具的路径:通过which jconsole来查看Amy:~ Amy$ which jconsole/usr/bin/jconsole3、打开jconsole链接窗口Amy:~ Amy$ /usr/bin/jconsole4、链接本地进程(可以监控本机的java)...

2018-12-04 09:25:01 616

原创 三、并发编程之创建线程的多种方式

1、继承Thread类/** * 1、创建线程 继承Thread类 * */public class Demo1 extends Thread{ public Demo1(String name){ super(name); } /** * 1、守护线程 * */// @Override// public void run() {// while(true) ...

2018-12-03 17:36:32 141

原创 二、并发编程之线程的生命周期详解

1、线程状态Start:初始化状态,调用start()方法,线程状态就变成就绪状态。ready-to-run:准备运行(就绪)状态,一旦抢占到了CPU就变成了运行状态,遇到stop(),或者run() exits就变成死亡状态。Running:运行状态,线程运行结束后就变成了死亡状态,遇到Object.wait()就变成等待状态,遇到Thread.sleep()就变成睡眠状态,遇到IO...

2018-12-03 17:27:17 200

原创 一、并发编程之并发、线程及进程的简介

1、并行与并发并行指在同一时间点同时执行并发是指在同一时间片段同时执行进程之间相互独立,可实现并行,多线程只能并发执行,实际还是顺执行,只是在同一时间片段,假似同时执行,cpu可以按时间切片执行,单核cpu同一个时刻只支持一个线程执行任务,多线程并发事实上就是多个线程排队申请调用cpu,cpu处理任务速度非常快,所以看上去多个线程任务是同时处理。2、并发的缺点安全性问题活跃性问题...

2018-12-03 17:24:16 212

JavaEE开发的颠覆者Spring Boot 实战 完整版

本书简介 1 推荐使用@configuration @bean 的Java配置来替代xml。 2 习惯优于配置的原则。快速搭建项目 3 在第一部分,介绍了快速Spring4.x各个知识点:基础配置、常用配置、高级配置等。 4 在第二部分,介绍了Spring MVC 的各个知识点。 5 在第三部分,才是核心的介绍Spring boot。

2018-09-09

深入Java虚拟机第二版

本书作者曾因本书荣获专业技术杂志《Java Report》评选的优秀作者奖,细心的读者可以从网上找到许多对本书第1版的赞誉。作者以易于理解的方式深入揭示了Java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益! 本书共分20章,第1-4章解释了Java虚拟机的体系结构,包括Java栈、堆、方法区、执行引擎等;第5-20章深入描述了Java技术的内部细节,包括垃圾收集、Java安全模型、Java的连接模型和动态扩展机制、class文件、运算及流程控制等等,其中第6章和附录A-C安全可以作为class文件和指令集的参考手册。本书还附带光盘,光盘中包含用以辅助说明正文内容的交互式例示applet及示例源代码。

2018-09-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除