自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王小仔

眼有星辰大海,胸有丘壑万千,心有繁花似锦

  • 博客(17)
  • 收藏
  • 关注

原创 Docker简介和安装

Docker简介Docker是一个开发、运输和运行应用程序的开放平台。Docker可以将应用程序和软件应用环境分离,以便快速的交付软件。使用Docker,可以像管理软件那样管理运行环境,并能够利用Docker提供的功能来快速的发布、测试及部署代码,减少开发环境和部署环境配置不一致的问题。简而言之:Docker是一种可以在同样硬件上实现不同环境的软件,解决了“这段代码在我的机器上没问题呀”的甩锅问题。Docker引擎Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Do

2020-07-31 22:55:05 42

原创 JVM加载class文件

概述JVM是一个内存中的虚拟机,也就意味着JVM的存储就是内存,我们所写的所有类常量变量方法都在内存中,这决定着我们程序运行的是否健壮,是否高效。原理JVM 中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java 中的类加载器是一个重要的Java 运行时系统组件,它负责在运行时查找和装入类文件中的类。类加载器本身也是一个类,其实质是把类文件从硬盘读取到内存中。类的加载方式分为隐式加载和显示加载。隐式加载指的是程序在使用 new 等方式创建对象时,会隐式地调用类的加载器把对应的类

2020-07-11 15:48:03 54

原创 JVM内存结构

Java SE体系架构JavaSE:Java 平台标准版,为 Java EE 和 Java ME 提供了基础。JDK:Java 开发工具包,JDK 是 JRE 的超集,包含 JRE 中的所有内容,以及开发程序所需的编译器和调试程序等工具。JRE:Java SE 运行时环境 ,提供库、Java 虚拟机和其他组件来运行用 Java 编程语言编写的程序。主要类库,包括:程序部署发布、用户界面工具类、继承库、其他基础库,语言和工具基础库JVM:java 虚拟机,负责 JavaSE 平台的硬件和操作系统无关性

2020-07-09 17:57:23 48

原创 并发工具类(二)之CountDownLatch

概述闭锁,CountDownLatch 这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。CountDownLatch 是通过一个计数器来实现的,计数器的初始值为初始任务的数量。每当完成了一个任务后,计数器的值就会减 1(CountDownLatch.countDown()方法)。当计数器值到达 0 时,它表示所有的已经完成了任务,然后在闭锁上等待 CountDownLatch.await()方法的线程就可以恢复执

2020-07-04 23:24:47 51

原创 并发编程(八)之ReentrantLock

概述可重入锁,简单地讲就是:“同一个线程对于已经获得到的锁,可以多次继续申请到该锁的使用权”。而 synchronized 关键字隐式的支持重进入,比如一个 synchronized修饰的递归方法,在方法执行时,执行线程在获取了锁之后仍能连续多次地获得该锁。ReentrantLock 在调用 lock()方法时,已经获取到锁的线程,能够再次调用lock()方法获取锁而不被阻塞。该特性的实现需要解决以下两个问题:线程再次获取锁。锁需要去识别获取锁的线程是否为当前占据锁的线程,如果是,则再次成功获取。

2020-07-03 18:15:16 37

原创 并发编程(七)之AQS

概述队列同步器 AbstractQueuedSynchronizer(以下简称AQS),是用来构建锁或者其他同步组件的基础框架,它使用了一个 int 成员变量表示同步状 态,通过内置的 FIFO 队列来完成资源获取线程的排队工作。并发包的大师(DougLea)期望它能够成为实现大部分同步需求的基础。AQS使用方式和其中的设计模式AQS 的主要使用方式是继承,子类通过继承 AQS 并实现它的抽象方法来管理同步状态,在 AQS 里由一个 int 型的 state 来代表这个状态,在抽象方法的实 现过程中免

2020-07-02 10:27:44 60

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

synchronized内置锁每个java对象都可以用做一个实现同步的锁,这些锁成为内置锁。线程进入同步代码块或方法的时候会自动获得该锁,在退出同步代码块或方法时会释放该锁。获得内置锁的唯一途径就是进入这个锁的保护的同步代码块或方法。内置锁是一个互斥锁,这就是意味着最多只有一个线程能够获得该锁,当线程A尝试去获得线程B持有的内置锁时,线程A必须等待或者阻塞,知道线程B释放这个锁,如果B线程不释放这个锁,那么A线程将永远等待下去。synchronized的使用在学习使用synchronized前,我们

2020-07-02 00:19:50 54

原创 并发编程(六)之显示锁Lock

概述Lock是一个接口,提供了无条件的、可轮询的、定时的、可中断的锁获取操作,所有的加锁和解锁操作方法都是显示的,因而称为显示锁。有了 synchronized 为什么还要 Lock?Java 程序是靠 synchronized 关键字实现锁功能的,使用 synchronized 关键字将会隐式地获取锁,但是它将锁的获取和释放固化了,也就是先获取再释放。特性描述尝试非阻塞地获取锁当前线程尝试获取锁,如果这一时刻锁没有被其他线程获取,则成功获取并持有锁能被中断地获取锁与s

2020-06-30 23:57:26 50

原创 Java中的位运算

概述前两天在冲浪的时候看到了位运算,寻思写了这么久在代码中也少有用到,估计是垃圾代码写得太多,没有去思考过。那既然看到了那就研究研究。关于进制进制是计算机中数据的一种表示方法。 N进制的数可以用0~(N-1) 的数表示, 超过9的用字母A-F 表示 。十进制:用 0~9 的数表示 , 逢 10 进 1二进制:由 0-1组成八进制:由 0-7组成,逢 8 进 1十六进制: 由 0-9,A-F组成。0-9 对应 0-9,A-F对应10-15。字母不区分大小写机制的转换二进制转十进制二进制

2020-06-30 01:22:32 123

原创 并发工具类(一)之ForkJoin

概述CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。什么是原子操作假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么B全部执行完,要么完全不执行B,那么 A 和 B 对彼此来说是原子的。如何实现原子操作实现原子操作可以使用

2020-06-29 15:20:18 41

原创 并发编程(三)wait/notify/notifyAll

什么是线程间的协作?线程之间相互配合,完成某项工作,比如:一个线程修改了一个对象的值,而另一个线程感知到了变化,然后进行相应的操作,整个过程开始于一个线程,而最终执行又是另一个线程。前者是生产者,后者就是消费者,这种模式隔离了 “做什么”(what)和“怎么做”(How),简单的办法是让消费者线程不断地循环检查变量是否符合预期在 while 循环中设置不满足的条件,如果条件满足则退出 while 循环,从而完成消费者的工作。却存在如下问题:难以确保及时性。难以降低开销。如果降低睡眠的时间,比如休眠

2020-06-27 22:05:50 29

原创 并发编程(五)之CAS乐观锁

概述CAS:Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。什么是原子操作假定有两个操作A和B,如果从执行A的线程来看,当另一个线程执行B时,要么B全部执行完,要么完全不执行B,那么 A 和 B 对彼此来说是原子的。如何实现原子操作实现原子操作可以使用

2020-06-25 22:32:12 49

原创 并发编程(四)之ThreadLocal详解

概述​ 多线程访问同一个共享变量的时候容易出现并发问题,特别是多个线程对一个变量进行写入的时候,为了保证线程安全,那一般使用者在访问共享变量的时候需要进行额外的同步措施才能保证线程安全性。ThreadLocal是除了加锁这种同步方式之外的一种保证一种规避多线程访问出现线程不安全的方法,当我们在创建一个变量后,如果每个线程对其进行访问的时候访问的都是线程自己的变量这样就不会存在线程不安全问题。​ ThreadLocal是JDK包提供的,它提供线程本地变量,如果创建了ThreadLocal变量,那么访问

2020-06-25 08:56:07 95

原创 并发编程(二)之Java中的线程

概述Java程序天生就是多线程的​ 一个 Java 程序从 main()方法开始执行,然后按照既定的代码逻辑执行,看似没有其他线程参与,但实际上 Java 程序天生就是多线程程序,因为执行 main() 方法的是一个名称为 main 的线程。[6] Monitor Ctrl-Break //监控 Ctrl-Break 中断信号的[5] Attach Listener //内存dump,线程 dump,类信息统计,获取系统属性等[4] Signal Dispatcher //分发处理发送给 J

2020-06-23 22:39:30 25

原创 并发编程(一)之线程和进程

线程和进程

2020-06-18 23:26:18 36

原创 MongoDB学习(一)

了解MongoDB文档数据库 MongoDB 用于记录文档( Document )结构的数据,如 JSON XML 结构的数据 。一 条文档就是一条记录(含数据和数据结构),一 条记录里可以包含若干个键值对( Key- Value Pair )。键值对由键和值两部分组成 ,键( Key),又叫字段( Field 。键值对的值可以是普通值,如字符型、整型等;也可以是其他值,如文档、数组及文档数组。...

2019-11-27 11:07:30 44

原创 基于spring的shiro配置

 1.web.xml中加入shiro的过滤器:<!--shiro的代理过滤器--><filter> <filter-name>shiroFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</...

2019-02-11 13:17:58 75

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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