多线程-synchronized实现原理分析

作者:EnjoyMoving,转自:https://zhuanlan.zhihu.com/p/29866981 锁的内存语义 synchronized的底层是使用操作系统的mutex lock实现的。 内存可见性: 同步块的可见性是由“如果对一个变量执行lock操作,将会清空工作内存中此变量的值,在执行引擎使用这个变量前需要重新执行load或assign操作初始化变量的值”、“对一个变量执行unlock操作之前,必须先把此变量同步回主内存中(执行store和wri

锁机制-自旋锁、偏向锁、轻量级锁、重量级锁

自旋锁 如果持有锁的线程能在很短时间内释放锁资源,那么那些等待竞争锁的线程就不需要做内核态和用户态之间的切换进入阻塞挂起状态,只需让线程执行一个忙循环(自旋),等持有锁的线程释放锁后即可立即获取锁,这样就避免用户线程和内核的切换的消耗。 自旋等待不能代替阻塞,自旋等待本身虽然避免了线程切换的开销,但是要占用处理器时间,因此如果锁被占用时间很短,自旋等待效果就会非常好,但如果锁被占用的时间很长,那么自旋的线程只会白白消耗处理器资源,不会有任何有用的工作,反而会带来性能上的浪费

多线程-单例模式安全问题

作者:孤独烟,转自:http://rjzheng.cnblogs.com/ 饿汉式 这种其实大家都懂,不多说,上代码。 package singleton; public class Singleton1 { private static Singleton1 instance = new Singleton1(); private Singleton1 (){} public static Singleton1 getInstance() {

多线程-单生产单消费模型

创建资源对象,提供保存和取出方法(使用synchronized代码块实现) /** * Created by shaoqinghua on 2018/5/3. * 定义一个负责保存和取出的资源类 */ public class Resource { /** * 定义成员变量,充当保存和取出的容器 */ private Object[] objs = new Object[1]; /** * 定义一个同步的锁对象

Pinpoint APM监控平台搭建

1 系统环境 Ubuntu 16.04 LTS hbase-1.2.6-bin.tar.gz(http://hbase.apache.org/) hbase-create.hbase(https://github.com/naver/pinpoint/tree/master/hbase/scripts) pinpoint-collector-1.7.2.war(https://github.com/naver/pinpoint/releases/tag/1

JDK8中HashMap源码分析

JDK7及以前,HashMap底层基于数组(Entry数组)和链表实现,计算hash时发生hash冲突将该节点以链表形式存储,当hash冲突过多会导致单个链表过长,查找节点时将耗费O(n)的查找时间 JDK8:底层基于数组(Node数组)、链表、红黑树实现,当同一hash值的节点数超过阈值(8),链表结构将会被转换为红黑树进行数据存储 底层以Node数组存储,对应TreeNode红黑树的实现 transient Node<K,V>[] table; 当ha

Dockerfile命令说明

FROM &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;指定创建镜像的基础镜像 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 任何Dockerfile中的第一条非注释指令必须为FROM指令,可以有多个FROM指令创建多个镜像(每个镜像一次) MAINTAINER &nbsp; &nbsp;&nbsp;&nbsp;&nbsp;

Ubuntu搭建ELK实时日志分析平台

1 系统环境 Ubuntu 16.04 LTS elasticsearch-6.1.2.tar.gz logstash-6.1.2.tar.gz kibana-6.1.2-linux-x86_64.tar.gz filebeat-6.1.2-linux-x86_64.tar.gz 2 ELK介绍 Elasticsearch:是一个分布式、可扩展、实时的搜索与数据分析引擎,具有高可伸缩、高可靠等特点。基于全文搜索引擎库Apache Lucene

Spring Boot集成Kafka

系统环境 使用远程服务器上搭建的kafka服务 Ubuntu 16.04 LTS kafka_2.12-0.11.0.0.tgz zookeeper-3.5.2-alpha.tar.gz 集成过程 1.创建spring boot工程,添加相关依赖: <?xml version=1.0 encoding=UTF-8?> <project xmlns=http://maven.apache.org/POM/4.0.0 xmlns:x

Ubuntu安装Kafka

系统环境 Ubuntu 16.04 LTS kafka_2.12-0.11.0.0.tgz zookeeper-3.5.2-alpha.tar.gz 安装测试 1. 下载tar包并解压 tar -zxvf kafka_2.12-0.11.0.0.tgz 2. 修改Kafka服务端配置文件server.properties(最重要配置:broker.id、log.dirs、zookeeper.connect) # 设置节点id broker.id