- 博客(40)
- 资源 (3)
- 收藏
- 关注
原创 java高并发(十五)J.U.C之FutureTask
FutureTash是J.U.C里面的,但是它不是AQS的子类,但是这个类对线程结果的处理很值得我们学习和在项目中使用。创建一个线程通常有两种方式,一种是直接继承Thread、另一种是直接实现Runnable,这两种方式有一个共同的缺陷就是在执行完任务之后无法获取执行结果。从java1.5开始就提供了Callable和Future,通过他们可以在任务完成之后得到任务的执行结果。Callab...
2019-07-31 18:33:00 86
原创 java高并发(十四)ReetrantLock 与锁
java主要分两类锁,一种是synchronized关键字修饰的锁,另一种是J.U.C.提供的锁。J.U.C里核心锁就是ReentrantLockReentrantLock(可重入锁)和synchronized区别可重入性 锁的实现,synchronized关键字是依赖于JVM实现的,而ReentrantLock是JDK实现的,这两个有什么区别?说白了就类似于操作系统来控制实现和用户自己...
2019-07-30 17:11:00 129
原创 java高并发(十三)并发容器J.U.C--AQS
AbstractQueueSynchronizer (AQS)J.U.C 大大提高了java并发的性能,而AQS则是J.U.C的核心。AQS底层使用双向列表(队列的一种实现)。使用Node实现FIFO队列,可以用于构建锁或者其他同步装置的基础框架 利用了一个int类型表示状态。在AQS中有一个status的成员变量,基于AQS有一个同步组件ReentrantLock,在这个Reen...
2019-07-30 16:42:00 137
原创 java高并发(十二)并发容器J.U.C
并发容器是JDK提供的一个包名:java.util.concurrentArrayList -> CopyOnWriteArrayListCopyOnWriteArrayList是线程安全的,写操作时复制,当有新元素添加到CopyOnWriteArrayList时先从原有的list中拷贝出来,然后在新的list上写操作,写完之后将原来的list指向新的list,整个操作都是在锁的保护...
2019-07-29 17:32:00 87
原创 java高并发(十一)同步容器
上面一节我们介绍了ArrayList、HashSet、HashMap这些容器都是非线程安全的。如果有多个线程并发访问这些容器时,就会触发线程安全问题。因此在编写程序的时候,必须要求开发人员手动的在任何访问到这些容器的地方进行同步处理,这样就导致使用起来非常不便。因此java提供了同步容器方便使用。在java中同步容器主要包括两类:ArrayList -> Vector,Stack;...
2019-07-29 16:24:00 79
原创 java高并发(十)线程不安全类与写法
什么是线程不安全类?如果一个类的对象同时可以被多个线程访问,如果不做特殊的同步与并发处理,就很容易表现出线程不安全的现象,比如抛出异常,比如逻辑处理错误等,这种类就是线程不安全类。StringBuilder->StringBuffer@Slf4jpublic class StringExample1 { // 请求总数 public static int cl...
2019-07-29 14:46:00 127
原创 java高并发(九)线程封闭
上一节介绍了不可变对象,通过在某些情况下将不会修改的类对象设计成不可变对象,来让对象在多个线程间保证对象是线程安全的。归根到底,相当于躲避开了并发问题,实现好的并发是一件很困难的事情,所以很多时候都想躲避并发,避免并发除了设计成不可变对象其实还有一个简单的方法就是线程封闭。什么是线程封闭?其实就是把对象封装到一个线程里,只有这一个线程能看到这个对象。那么这个对象就算不是线程安全的,也不会出...
2019-07-28 22:25:00 88
原创 java高并发(八)不可变对象
有一种对象一旦发布了,那么他就是安全对象,这就是不可变对象。不可变对象需要满足的条件:对象创建以后其状态就不能修改 对象所有的域都是final类型 对象是正确创建的(在对象创建期间,this引用没有逸出)final关键字:类、方法、变量修饰类:不能被继承。final类中的成员变量可以根据需要设置为final,要注意的是final类中的所有成员方法都会被隐式的指定为final方法。...
2019-07-25 14:40:00 95
原创 java高并发(七)发布对象
发布对象发布对象:是指使一个对象能够被当前范围之外的代码所使用。对象逸出:一种错误的发布。当一个对象还没有构造完成时,就使它被其他线程所见。我们经常需要发布一些对象例如通过类的非私有方法返回对象的引用,或者通过共有静态变量发布对象。简单例子:@Slf4j@NotThreadSafepublic class UnsafePublish { private Strin...
2019-07-24 17:33:00 112
原创 java高并发(六)线程安全性
定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些进程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。线程安全性体现在以下三个方面:原子性:提供了互斥访问,同一时刻只能有一个线程来对它进行操作。 可见性:一个线程对主内存的修改可以及时的被其他线程观察到。 有序性:一个线程观察其他线程中的指令执行...
2019-07-23 17:48:00 138
原创 java高并发(五)并发模拟
在project-1中新建controller,TestController.java内容如下:@RestController@Slf4jpublic class TestController { @GetMapping("/test") public String test() { return "test"; }}需要依赖Slf4j...
2019-07-22 17:04:00 118
原创 java高并发(四)并发编程与线程安全
代码有多个线程同时运行,而这些线程可能会同时运行同一段代码,如果每次运行的结果和单线程运行的结果是一样的,我们就认为是线程安全的。线程不安全就是线程不提供访问保护,有可能出现多个线程先后更改数据,造成所得到的数据是脏数据,也可能是计算时出现错误。新建项目project-1,pom.xml文件内容如下:<?xml version="1.0" encoding="UTF-8"?...
2019-07-22 16:38:00 120
原创 java高并发(三)并发编程的基础
CPU多级缓存为什么需要CPU缓存?原因是,CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期内,CPU常常需要等待主存,浪费资源。所以cache的出现,是为了缓解CPU和内存之间速度的不匹配问题。CPU缓存有什么意义?时间局部性:如果某个数据被访问,那么在不久的将来它很有可能被再次访问。 空间局部性:如果某个数据被访问,那么与它相邻的数据很快也可能被访问。CPU多级缓存...
2019-07-22 15:14:00 89
原创 java高并发(二)并发与高并发基本概念
并发同时拥有两个或者多个线程,如果程序在单核处理器上运行,多个线程将交替地换入或者换出内存,这些线程是同时“存在”的,每个线程都处于执行过程中的某个状态,如果运行在多核处理器上,此时,程序中的每个线程都将分配到一个处理器核上,因此可以同时运行。高并发高并发(High Concurrency)是互联网分布式系统框架设计中必须考虑的因素之一,它通常是指,通过设计保证系统能够同时并行...
2019-07-22 11:37:00 97
原创 java高并发(一)导学
现在准备系统学习java高并发与多线程相关知识。首先了解一下我们这一套知识的学习思路:并发与高并发相关概念 CPU多级缓存 缓存一致性 乱序执行优化 java内存模型 JMM规定、抽象结构 同步操作与规则 并发优势与风险 并发模拟 Postman、JMetter、Apache Bench、代码 并发及并发的线程安全处理线程安全性原子性、可见性、有序...
2019-07-22 11:23:00 98
原创 docker 部署springboot容器日志处理
将jdk和需要的运行的jar构建成镜像之后,运行成容器之后,可以实时的输出日志,但是当容器挂掉之后,日志也便消失不见。在容器中可以运行bash命令的前提下,容器运行的时候会根据jar中配置的日志目录生成相应的日志文件,当容器停止的时候在容器中的所有的东西也会消失不见,查询原因时就会遇到问题。方式一:docker logs containerId/containerName这种方...
2019-07-19 10:59:00 1449
原创 ElasticSearch重启之后shard未分配问题的解决
环境:Ubuntu16.04 elasticsearch 6.2.3 3个master节点,10个data节点 每个分片有一个副本故障: 将一个数据节点的elasticsearch换成docker elasticsearch,分词器没有添加到plugins中。随后把分词器添加到plugins中后,发现有的分片没有被分配,但是ES集群启动正常,只不过一直是yello...
2019-07-17 12:52:00 2479
原创 将springboot jar应用打包成镜像并在docker运行成容器
Dockerfile内容如下:FROM java:8-alpineADD test-0.0.1-SNAPSHOT.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "/app.jar"]构建镜像: docker build -t vincent/springboot-java .运行镜像:docker run -d -p 8...
2019-07-16 15:22:00 200
原创 Elasticsearch Java Client 版本区别及起步(5.X 和6.X)
简单总结:如果服务端是5.6以下的,选择相同版本的TransportClient,避免一些API服务端不支持 如果服务端是5.6以上的,选择相同版本的RestClientTransportClient起步:5.6及之前的版本:// on startupClient client = TransportClient.builder().build() .ad...
2019-07-13 17:33:00 702
原创 从零开始学习docker(二十二)容器监控
docker ps可以知道后台有哪些容器在运行。docker ps -a可以知道后台有哪些容器在运行。包括退出的容器。docker top CONTAINER_ID可以知道container中的一些进程。类似于系统中的top命令。docker stats实时打印每个容器在系统的资源占用情况。包括CPU,内存等。图形化界面监控工具weavescope安装:s...
2019-07-12 16:09:00 131
原创 docker 常用命令
docker 删除容器一般情况下删除容器,需要先将容器stop(docker container stop containerID),然后才能删除(docker container rm containerID)。可以使用 -f 选项强制删除: docker container rm -f containerIDdocker 删除已经停止的容器docker container rm...
2019-07-11 11:38:00 208
原创 从零开始学习docker(二十一)service管理
本节我们介绍如何以方便的方式管理service。我们之前提到docker-compose,适用于本地开发,可以在本机部署,提供了很大的便利。而swarm是一个cluster,可不可以通过docker-compose来实现定义的application?答案是可以,但是不推荐。仅仅使用docker命令行就可以。我们依然可以使用docker-compose.yml文件去定义一个应用,但是我们一般不用...
2019-07-09 16:16:00 180
原创 从零开始学习docker(二十)RoutingMesh--Ingress负载均衡
我们知道容器之间的通信,例如上图中的10.0.9.3与10.0.9.5通信是通过overlay网络,是通过一个VXLAN tannel来实现的。但是service和service之间通信是通过VIP实现的。例如client的service与web 的service进行通信,而web有一个scale,因此client访问web是通过访问虚拟IP(VIP)来实现的。那么VIP是怎么映射到具...
2019-07-09 14:31:00 829
原创 从零开始学习docker(十九)Swarm mode 集群服务间通信--RoutingMesh
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-08 19:10:00 541
原创 从零开始学习docker(十八)Swarm mode 部署wordpress
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-06 11:28:00 310
原创 从零开始学习docker(十七)Swarm mode ---service
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-06 00:28:00 149
原创 从零开始学习docker(十四)Docker Compose--build
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-05 11:49:00 1345
原创 从零开始学习docker(十四)Docker Compose--部署SpringCloud
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> 本章节我们介绍如何使用docker-compose部署复杂的application。先介绍一些docker-compose的简单命令:docker-compose build这个命令可以根据docker-compose.yml文件内容,构建服务镜像。docker-compose up...
2019-07-05 11:44:00 360
原创 从零开始学习docker(十三)Docker Compose--scale
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-05 00:58:00 868
原创 从零开始学习docker(十二)介绍Docker Compose基本使用
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-04 01:16:00 453
原创 从零开始学习docker(十一)介绍Docker Compose yml文件介绍
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-04 01:05:00 205
原创 从零开始学习docker(十)搭建WordPress+Mysql,为什么要用Docker Compose
我们从这一节开始介绍一个非常非常重要的工具--Docker Compose,这个工具会经常使用。先从一个案例介绍一下我们为什么要用Docker Compose。案例:如何通过容器部署一个WordPress?现将WordPress拉取到本地:docker pull wordpressdocker image lsREPOSITORY TAG ...
2019-07-04 00:37:00 174
原创 从零开始学习docker(九)持久化存储和数据共享之 bind Mounting
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-03 00:45:00 102
原创 从零开始学习docker(九)持久化存储和数据共享之 Data Volume
撸了今年阿里、头条和美团的面试,我有一个重要发现.......>>> ...
2019-07-01 22:42:00 168
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人