
java
文章平均质量分 87
逆月林
区块链极客,技术栈:Java,Golang,Javascript;
展开
-
jdk并发包源码解析
一、总括java底层并发包,笔者将该包大致分成3个层次。1、基础依赖:共享变量volatile:有利于线程可见性。Unsafe类:CAS(Compare and Swap)比较并交换,用于并发下交换数据;Thread相关挂起(park)及取消挂起的功能。2、基础类(基础类的实现基本是基于基础依赖的类来实现):AQS(AbstractQueuedSynchronizer): 抽象...原创 2020-01-15 14:32:33 · 649 阅读 · 0 评论 -
Dubbo框架架构
一、整体框架1、Dubbo介绍Apache Dubbo是一款高性能、轻量级的开源Java RPC框架。它有三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。1、Dubbo特点1、面向接口代理的高性能RPC调用:提供高性能的基于代理的远程调用能力,服务以接口为粒度,为开发者屏蔽远程调用底层细节。2、智能负载均衡:内置多种负载均衡策略,智能感知下游节点健康状...原创 2020-01-14 15:45:25 · 4741 阅读 · 0 评论 -
JAVA多线程系列--Lock锁-ReentrantLock,ReentrantReadWriteLock应用
1.前言java除了synchronized 锁外,还有Lock更加灵活的锁。ReenTrantLock从名字上理解,是可再进入的锁。重入锁是一种递归无阻塞的同步机制,底层实现采用AQS原理实现,具体实现原理将在今后的文章中具体探讨。ReentrantReadWriterLock:可重入读写锁。读写锁:分为读锁和写锁,多个读锁不互斥,读锁与写锁互斥,这是由jvm自己控制的,你只要上好相原创 2017-11-22 17:46:05 · 415 阅读 · 0 评论 -
JAVA多线程系列--Lock锁-ReentrantLock之Condition应用
1.Conditionsynchronized与wait()和nitofy()/notifyAll()方法相结合可以实现等待/通知模型,ReentrantLock同样可以,但是需要借助Condition,且Condition有更好的灵活性,具体体现在:1、一个Lock里面可以创建多个Condition实例,实现多路通知2、notify()方法进行通知时,被通知的线程时Java虚拟机原创 2017-11-22 19:39:26 · 496 阅读 · 0 评论 -
JAVA多线程系列--指令重排和happens-before规则
1 背景 我们在平时所习惯的单线程编程中默认了一种乐观的模型——串行一致性。即在程序中只存在唯一的操作执行顺序,并且在每次读取变量时,都能获得在执行序列(任何处理器)最近一次写入该变量的值。但在JVM底层的很多操作在现代多处理器架构中都不会提供这种串行一致性。这样是导致线程不完全问题的深层次原因。导致非串行执行的原因是指令重排引起的,下面笔者将介绍下指令重排和规避指令重排的方法happens-be原创 2017-12-14 16:15:00 · 1125 阅读 · 0 评论 -
JAVA多线程系列--ReentrantLock实现原理-AQS详解
1.概述 前文笔者已经讲了ReentrantLock的使用,在这篇文章中我们将讲讲ReentrantLock的底层实现AbstractQueuedSynchronized(AQS)。 AQS:抽象的队列式的同步器。AQS定义了一套多线程访问共享资源的同步器框架,许多同步类实现都依赖于它,如常用的ReentrantLock/Semaphore/CountDownLatch。2.AQS框架原创 2017-11-23 17:40:24 · 571 阅读 · 0 评论 -
JAVA多线程系列--并发工具类(CountDownLatch, CyclicBarrier, Semaphore,Exchanger)
前言本节笔者将详细讲下CountDownLatch, CyclicBarrier, Semaphore,Exchanger 这四个并发工具类的使用。 这4个工具类在高并发的场景下,也是使用广泛。1.1 CountDownLatch简介CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。1.2 CountDownLatch使用场景 1原创 2017-12-14 19:10:48 · 456 阅读 · 0 评论 -
区块链系列-----加密算法汇总
背景区块链背景下,对密码学技术要求需要有很深的研究。笔者以java语言为例,搜罗各种加密算法的相关使用。 github地址:https://github.com/niyuelin1990/mycrypto简介搜罗各种加密算法电子邮件传输算法Base64摘要算法MD2,MD5;SHA-256,SHA-348,SHA-512;HMAC;RipeMD系列,Tig...原创 2018-04-10 12:13:11 · 5567 阅读 · 1 评论 -
Jaeger架构及java-sdk使用
Jaeger架构Jaeger组成: Jaeger Client - 为不同语言实现了符合 OpenTracing 标准的 SDK。应用程序通过 API 写入数据,client library 把 trace 信息按照应用程序指定的采样策略传递给 jaeger-agent。 Agent - 它是一个监听在 UDP 端口上接收 span 数据的网络守护进程,它会将数据批量发送给 collect...原创 2018-05-18 16:10:09 · 6661 阅读 · 1 评论 -
commons-pool2中GenericKeyedObjectPool对象池
commons-pool 对象池commons-pool 中实现了多个对象池类,对象池类可以用于数据库连接池,tcp客户端池。 maven依赖:<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId...原创 2018-05-15 16:38:54 · 5325 阅读 · 0 评论 -
基于以太坊众筹系统
以太坊众筹系统https://github.com/niyuelin1990/CrowdFunding项目环境IntelliJ IDEA 2017 Apache Tomcat 8Geth 1.7.3准备工作learn 搭建 geth 私有环境启动私有链##初始化geth genesis.json在工程目录./geth init ./genes...原创 2018-06-12 18:00:39 · 6432 阅读 · 4 评论 -
比原链Bytom JAVA SDK使用指南
最近在开源社区协助比原链完成了 java sdk,这里跟大家分享下哈。Bytom Java SDKThis SDK contains methods for easily interacting with the Bytom API. Below are examples to get you started. For more information, please see Byt...原创 2018-05-30 09:37:52 · 1085 阅读 · 0 评论 -
Zookeeper客户端Curator使用介绍
简介Curator是Netflix公司开源的一套zookeeper客户端框架,解决了很多Zookeeper客户端非常底层的细节开发工作,包括连接重连、反复注册Watcher和NodeExistsException异常等等。Patrixck Hunt(Zookeeper)以一句“Guava is to Java that Curator to Zookeeper”给Curator予高度评价。 ...原创 2018-07-19 21:14:23 · 400 阅读 · 1 评论 -
JAVA多线程系列--Unsafe和CAS,Volatile---concurrent包的基石
1.Unsafesun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中。Unsafe类是用来做一些Java语言不允许但是又十分有用的工作,Unsafe是通过调用JNI的代码实现的。JNI:Java Native Interface为JAVA本地调用,允许java调用其他语言。 Unsafe顾名思义是不安全的类,故如果作者对它不够熟悉,不建议在自己代码中使用。原创 2017-11-17 10:25:25 · 3552 阅读 · 3 评论 -
JAVA多线程系列--线程实现方式
前言:Java线程的实现方式有3种,分别是 Thread,Runable,Callable。 1.Thread/** * 线程死锁 用jstack pid查看死锁 * @author wangting * */public class DeadLock extends Thread { protected Object tool; static Object f原创 2017-11-07 19:55:36 · 461 阅读 · 0 评论 -
Epoll在Java Nio中的实现
Nio与Epoll一直对nio和epoll没有系统的认识,最近看了下openjdk,简单的做个记录。Linux2.6之后支持epollwindows支持select而不支持epoll不同系统下nio的实现是不一样的,包括Sunos linux 和windowsselect的复杂度为O(N)select有最大fd限制,默认为1024修改sys/select.h可以改变select的f转载 2017-02-28 13:49:03 · 2247 阅读 · 0 评论 -
Git代码管理
Git代码管理Git代码管理 之我见:1、GIT简介2、GIT常见指令3、GIT代码规范4、功能开发5、BUG修复6、代码提交7、Git merge/git rebase8、代码评审9、其他有效指令10、问题11、总结1、GIT简介 Git是目前世界上最先进的分布式版本控制系统,每个电脑上都是完整的版本,如果多人协作开发,只要推送各自的修改就行 —— [链接 ]集中原创 2017-07-17 20:22:58 · 509 阅读 · 0 评论 -
java 获取线程dump最佳方案
最近在做openapm 监控相关的项目,其中涉及到破析线程dump的功能。其中有2个方案。第一个方案是指令获取: jstack -l pid。第二种方案是在程序里面开一个线程获取数据。代码如下public class Runthread {public static void main(String[] args) {// 线程1new Thread() {@O原创 2017-09-19 17:23:00 · 11557 阅读 · 1 评论 -
java,go语言 压缩 snappy 的使用
snappy原创 2017-09-22 13:31:36 · 4001 阅读 · 1 评论 -
java 获取内存dump 的几种方式
1、获取内存详情:jmap -dump:format=b,file=e.bin pid这种方式可以用 jvisualvm.exe 进行内存分析,或者采用 Eclipse Memory Analysis Tools (MAT)这个工具2. 获取内存dump: jmap -histo:live pid这种方式会先出发fullgc,所有如果不希望触发fullgc 可以使原创 2017-09-19 19:19:32 · 30903 阅读 · 1 评论 -
基于pinpoint改造的一种方式的思考(2)--collector 的数据处理
pinpoint 改造 collector原创 2017-09-25 16:13:49 · 3148 阅读 · 3 评论 -
基于pinpoint改造的一种方式的思考(3)--javascript/golang agent处理
前言在前一篇文章中,我们探讨了collector 的数据处理,这一篇中我们将讲讲如何构建javascript、golang agent。原创 2017-10-05 20:17:45 · 2728 阅读 · 0 评论 -
基于pinpoint改造的一种方式的思考(1)--agent 添加代理层
Pinpoint 改造原创 2017-09-22 08:47:18 · 4323 阅读 · 0 评论 -
graphql----java使用
前言前一篇,已经讲了go语言中的使用。那么java端如何使用。1.定义用户结构public class User { private int id; private int age; private int sex; private String name; private String pic; // get set方法}原创 2017-11-02 13:28:57 · 1727 阅读 · 1 评论 -
JAVA多线程系列--ThreadLocal详解
1. ThreadLocal是什么?ThreadLocal,是线程本地变量,也可以称为线程本地存储。ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。1.1 数据库链接例子class ConnectionManager { private static Connection connect = null; public static C原创 2017-11-28 15:01:26 · 315 阅读 · 0 评论 -
JAVA多线程系列--ForkJoinPool详解
1. 什么是ForkJoinPoolForkJoinPool是JDK7引入的线程池,核心思想是将大的任务拆分成多个小任务(即fork),然后在将多个小任务处理汇总到一个结果上(即join),非常像MapReduce处理原理。同时,它提供基本的线程池功能,支持设置最大并发线程数,支持任务排队,支持线程池停止,支持线程池使用情况监控,也是AbstractExecutorService的子类,主要引原创 2017-11-28 19:45:24 · 36096 阅读 · 4 评论 -
JAVA多线程系列--关键字(volatile,synchronized)
1.Synchronized 使用范围:1.对于普通同步方法,锁水当前实例对象 2.对于静态同步方法,锁是当前类的class对象 3.对于同步方法快,锁是synchonized内配置的对象 实现原理:JVM要保证每个monitorenter必须有对应的monitorexit与之配对。 任何对象都有一个monit原创 2017-11-08 19:28:24 · 421 阅读 · 0 评论 -
【JAVA】JAVA线程及锁基础知识-niyuelin
JAVA线程及锁基础知识-wangting线程实现方式并发关键字Lock锁并发工具类线程池Exector问题及实践原创 2016-10-11 14:07:56 · 396 阅读 · 0 评论