自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

白夜行悟空

日光之下,并无新事。

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

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

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 6029 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

原创 十五、SpringCloud之服务网关Zuul

一、服务网关简介1、为什么需要网关服务假如没有网关服务,当前起了十几个服务,订单,商品,广告,支付等,客户端要和每个服务一个一个打交道,显然是不现实的,肯定需要一个角色充当Request请求的统一入口,充当这个角色的就是服务网关。2、服务网关的要素稳定性,高可用(网关瘫痪,系统全挂,完全不能对外服务,影响可能是致命的)性能,并发性(所以请求都要通关网关,所以网关的访问压力是巨大的)...

2018-11-30 10:41:50 413 1

原创 十四、SpringCloud之在商品和订单服务中使用MQ、Redis

一、商品服务pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=&quot

2018-11-28 16:06:34 1374

原创 十三、SpringCloud之消息和异步及Spring Cloud Stream的使用

一、简介1、异步客户请求不会阻塞进程,服务端的响应是可以非即时的。2、异步的常见形态通知 请求/异步响应 消息3、MQ应用场景异步处理:比如用户注册之后,需要发送短信或者邮件,注册信息写入数据裤之后通过异步消息,让短信服务和邮件服务去做他们的事,提升用户体验。 流量削峰:秒杀系统,在应用前端加入消息队列,从而控制活动的人数,加入队列长度超过最大,应该直接抛弃用户请求...

2018-11-27 15:06:04 2911 1

原创 十二、SpringCloud之Spring Cloud Bus配置中心

一、简介ConfigServer使用了Spring Cloud Bus之后(引入Spring Cloud Bus用来操作消息队列),会对外提供一个接口,叫做bus-refresh,远端git访问这个接口ConfigServer就会把配置更新的信息发送到消息队列(RabbitMQ)里面,ConfigServer 和order服务通过消息队列(RabbitMQ)来传递消息二、Spring ...

2018-11-26 10:50:00 192

原创 NATAPP教程

首先在本站注册账号 点击注册 登录后,点击左边 购买隧道,免费/付费均可 根据需要选择隧道协议,这里以web演示,购买隧道 本机建立web服务,如 nginx/apache/iis 等,默认80端口 确保 http://127.0.0.1 可以访问,如在 natapp.cn 根据您的本机下载对应的客户端,比如我的本机是win10,64位,则...

2018-11-26 10:17:54 1647 2

原创 打不开 /dev/vmmon: 无此文件或目录。请确保已载入内核模块 ’vmmon’”。

使用VMware fusion 安装虚拟机系统,一直显示打不开 /dev/vmmon: 无此文件或目录。请确保已载入内核模块 ’vmmon’”。网上的命令试了一大堆,都不行,原来关键点在这,如下图所示:打开 设置 -> 安全性与隐私 -> 通用,“在允许从以下位置下载的应用”中,选择“任何来源”即可。注意:假如你的电脑没有安全与隐私没有允许任何来源选项打开终端输入 ...

2018-11-21 16:06:03 28499 11

原创 十一、SpringCloud之统一配置中心

一、简介1、为什么需要统一配置中心不方便维护(多人修改配置文件,容易出现问题) 配置内容安全与权限(隔离配置文件,不对开发公开) 更新配置项目需重启(更新配置文件重启项目太麻烦了)2、统一配置中心总体架构将配置放在远端git上,这样版本控制起来会比较方便,config-server会从远端的git上把配置拉取下来,然后放在本地的git里(双向流动,假如远端的git访问不了,con...

2018-11-21 15:12:59 317

原创 mac系统下,如果改坏了bash_profile后的救助方法

修改了 .bash_profile 的配置,如果配置不对很容出现许多内置命令都无法识别,不管输入什么命令都提示 command not found,连 rm、cd、vi 这些命令都用不了了。这个时候,可以用下面的方法解决:export PATH=/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin然后把之前...

2018-11-20 10:10:30 1821

原创 安装Homebrew并使用Homebrew安装git

1、安装Homebrew安装HomebrewAmy:~ Amy$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"查看Homebrew的版本Amy:~ Amy$ brew --versionHomebrew 1.8.2Homebre...

2018-11-20 09:48:29 3206 2

原创 十、SpringCloud之将商品服务和订单服务改造成多模块项目

一、商品服务1、product父项目pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:s...

2018-11-19 11:16:56 368

原创 idea常用设置及遇到常用问题

一、常用设置1、背景颜色设置2、字体大小设置3、字体颜色设置4、maven设置5、每次启动打开启动界面而不是打开最后一个关闭的项目【取消】选择复选框,这样配置后,每次都会打开启动界面。6、显示行号(新版本默认选中)7、不区分大小写进行自动完成8、标签大小改为 10 个,打开的标签超过 10 个时,就会自动关闭最少使用的标签。9...

2018-11-16 16:47:03 497

原创 九、SpringCloud之Feign的使用

一、Feign简介声明式Rest客户端(伪RPC) 采用基于接口的注解(定义接口,然后在接口上添加注解‘)二、使用步骤客户端:@RestControllerpublic class ServerController { @GetMapping("/msg") public String msg(){ return "this is product...

2018-11-09 10:13:56 223

原创 八、SpringCloud之负载均衡器Ribbon

一、简介1、RibbonRibbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中...

2018-11-07 22:17:28 273

原创 七、SpringCloud之RestTemplate的三种使用方式

一、简介1、应用通信方式:RPC、HTTP Dubbo:RPC SpringCloud:HTTP RestFul2、SpringCloud中服务间两种restful调用方式RestTemplate Feign3、RestTemplate:Spring提供的用于访问Rest服务的客户端一个Http客户端,属于客户端发现,负载均衡是软负载,客户端会向服务器,比如EurekaSe...

2018-11-07 20:47:12 6502

原创 六、SpringCloud之订单服务

一、商品服务1、Sql 在数据库运行Sql语句-- 订单create table `order_master` ( `order_id` varchar(32) not null, `buyer_name` varchar(32) not null comment '买家名字', `buyer_phone` varchar(32) not null commen...

2018-11-07 16:05:06 626

原创 五、SpringCloud之商品服务

一、Eureka Serverpom.xml 引入相关依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:...

2018-11-07 16:04:54 568

原创 四、SpringCloud之服务拆分分析

1、微服务拆分的起点和终点起点:既有架构的形态(将一个已有的架构转化为微服务架构) 终点:好的架构不是设计出来的,而是进化来的(一直在演进ing)2、业务形态不适合微服务的系统中包含很多强事务场景 业务相对稳定,迭代周期长 访问压力不大,可用性要求不高3、康威定律任何组织在设计一套系统(广义概念上的系统)时,所交付的设计方案在结构上都与该组织的沟通结构保持一致。(沟通的问题会...

2018-11-07 16:04:43 4706

原创 一、JVM之jdk、jre、jvm的关系

一、Java概念图二、jdk、jre、jvm三者的关系1、JDKJDK(Java Development Kit) 是整个JAVA的核心,包括了Java运行环境(Java Runtime Envirnment),一堆Java工具(javac/java/jdb等)和Java基础的类库(即Java API 包括rt.jar)。JDK包在目录下面有六个文件夹、一个src类库源码压缩包、和...

2018-11-07 16:04:02 558

原创 三、SpringCloud之Eureka的高可用

1、 两个Eureka互相注册,client同时注册两个Eureka让两个Eureka相互注册,它们之间的信息就会相互交换,虽然client只在Eureka1上注册,但是Eureka1会把信息同步到Eureka2里,所以Eureka2也能看到client这个服务。这个时候Eureka1挂掉了,Eureka2上依然有client这个服务。重启client,Eureka2没有client这个服务了...

2018-11-02 14:41:10 379

原创 二、SpringCloud之Eureka服务注册与发现

一、Eureka简介1、基于Netflix Eureka做了二次封装2、两个组件组成:Eureka Server 注册中心 Eureka Client 服务注册3、Eureka总结:@EnableEurekaServer   @EnableEurekaClient 心跳检测、健康检查、负载均衡等功能 Eureka的高可用,生产上建议至少两台以上二、Eureka Serve...

2018-11-02 11:19:59 521

原创 一、SpringCloud之微服务介绍

1、微服务James Lewis & Martin Fowler 2014年3月25日写的《Microservices》:微服务是一种架构风格。一系列微小的服务共同组成 跑在自己的进程里 每个服务为独立的业务开发 独立部署 分布式管理微服务特点:异构不同语言 不同类型的数据库2、其他常见架构形态单体架构优点:容易测试、容易部署缺点:开发效率低、稳定性...

2018-11-02 11:16:03 423

原创 二十六、SpringBoot之开发热部署

一、热部署在开发中我们修改一个Java文件后想看到效果不得不重启应用,这导致大量时间花费,我们希望不重启应用的情况下,程序可以自动部署(热部署)。有以下四种情况,如何能实现热部署。1、模板引擎在SpringBoot中开发情况下禁用模板引擎的cache,页面模板改变ctrl+F9可以重新编译当前页面并生效。2、Spring Boot Devtools(推荐)引入依赖<d...

2018-11-01 11:51:51 160

原创 二十五、SpringBoot之分布式(Zookeeper和Dubbo、SpringBoot和SpringCloud)

一、分布式应用在分布式系统中,国内常用zookeeper+dubbo组合,而SpringBoot推荐使用全栈的Spring,SpringBoot+SpringCloud。分布式系统: 单一应用架构当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。垂直应用架构当访问量逐渐增大,单一应用...

2018-11-01 11:33:08 5996 4

原创 docker下安装zookeeper

1、安装镜像[root@localhost zwj]# docker pull registry.docker-cn.com/library/zookeeper [root@localhost zwj]# docker imagesREPOSITORY TAG IMAGE ID ...

2018-10-31 09:47:12 591

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关注的人

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