- 博客(172)
- 资源 (1)
- 收藏
- 关注
原创 Netty 实战:如何编写一个麻小俱全的 web 容器
学习 Netty 也有一段时间了,为了更好的掌握 Netty,我手动造了轮子,一个基于 Netty 的 web 容器:redant,中文叫红火蚁。创建这个项目的目的主要是学习使用 Netty,俗话说不要轻易的造轮子,但是通过造轮子我们可以学到很多优秀开源框架的设计思路,编写优美的代码,更好的提升自己。PS:项目地址:https://github.com/all4you/redant快速启动Redant 是一个基于 Netty 的 Web 容器,类似 Tomcat 和 WebLogic...
2019-10-24 11:06:01
495
原创 Java-ClassLoader详解
一、ClassLoader概念 ClassLoader是用来动态的加载class文件到虚拟机中,并转换成java.lang.class类的一个实例,每个这样的实例用来表示一个java类,我们可以根据Class的实例得到该类的信息,并通过实例的newInstance()方法创建出该类的一个对象,除此之外,ClassLoader还负责加载Java应用所需的资源,如图像文件和配置文件等。 ...
2019-07-31 16:20:36
543
原创 从0学Netty第一篇 - 五大Linux网络IO模型简介
点击上方“毕来生”,选择“设为星标”技术好文定时推送!作者:毕来生微信:878799579前言很多开源框架都是基于Netty去衍生的,如能很好的理解Netty的运作原理,我们对开源框架的源码可以更轻松的掌握以及上手。故写此系列文章。希望本文中的内容可以对你有帮助,如有遇到描述/画图不正确,请参考上方联系方式联系。会第一时间进行更正。术语科普1、同...
2019-07-26 16:39:36
315
原创 【Nacos系列第三篇】- Nacos之Spring Boot Config
作者:毕来生微信:878799579前言 个人比较看好Spring Cloud Alibaba家族。此系列以Nacos为主题,从Spring、Spring boot、Spring Cloud多个方面逐步进行演示,源码解读。目前来看官方文档还有待完善。网络上除了官网外缺少Nacos系列文章。都是零零散散的知识点。如此系列文章哪里写的有不周全,错误之处。欢迎大家指正。谢谢。 因公众号排...
2019-01-15 18:52:22
760
原创 【Nacos系列第二篇】-Nacos之Spring Boot Discovery
作者:毕来生微信:878799579前言 个人比较看好Spring Cloud Alibaba家族。此系列以Nacos为主题,从Spring、Spring boot、Spring Cloud多个方面逐步进行演示,源码解读。目前来看官方文档还有待完善。网络上除了官网外缺少Nacos系列文章。都是零零散散的知识点。如此系列文章哪里写的有不周全,错误之处。欢迎大家指正。谢谢。 因公众号排...
2019-01-14 15:49:09
987
原创 【Nacos系列第一篇】-Nacos之Spring Discovery 以及Config
【Nacos系列第一篇】-Nacos之Spring Discovery前言 个人比较看好Spring Cloud Alibaba家族。此系列以Nacos为主题,从Spring、Spring boot、Spring Cloud多个方面逐步进行演示,源码解读。目前来看官方文档还有待完善。网络上除了官网外缺少Nacos系列文章。都是零零散散的知识点。如此系列文章哪里写的有不周全,错误之处。欢迎大家...
2019-01-13 20:43:52
1236
原创 【JUC系列第五篇】-ReentrantLock锁原理解读
作者 : 毕来生微信: 878799579锁状态转换Lock分类 Jdk1.5以后帮助我们提供了线程同步机制,通过显示定义同步锁来实现对象之间的同步。还是Doug Lea这个家伙写的。相信读过源码的人在很多地方都可以看到这个家伙。 Lock可以显示的进行加锁,解锁。但是每次只能有一个线程对Lock对象加锁 Lock实现结构如下图所示: 按照使用的常用度,分别标注了(1...
2019-01-03 22:29:15
358
原创 【JUC系列第四篇】-CountDownLatch使用场景分析
作者 : 毕来生微信: 878799579前言 在 java.util.concurrent 包中提供了多种并发容器类来改进同步容器 的性能。今天我们来聊一聊CountDownLatch 的使用场景。看看它到底是怎么玩耍的。CountDownLatch 是干什么的? CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作 之前,它允许一个或多个线程一直...
2019-01-03 22:26:19
382
原创 【JUC系列第三篇】-CAS算法详解
作者 : 毕来生微信: 8787995791、CAS是什么?CAS是英文单词(Compare-And-Swap)的缩写,中文意思是:比较并替换。CAS需要有3个操作数:内存地址V,旧的预期值A,即将要更新的目标值B。CAS指令执行时,当且仅当内存地址V的值与预期值A相等时,将内存地址V的值修改为B,否则就什么都不做。整个比较并替换的操作是一个原子操作。Cas乐观锁算法演示...
2019-01-02 20:00:56
504
原创 【JUC系列第二篇】-原子变量
作者:毕来生微信:8787995791、什么是原子变量? 原子变量保证了该变量的所有操作都是原子的,不会因为多线程的同时访问而导致脏数据的读取问题。2、通过synchronized保证原子操作获取锁对象获取失败/获取不到 ->阻塞队列等待释放锁对象3、Atomic之AtomicInteger源码分析java.util.concurrent.atomi...
2019-01-02 19:58:54
297
原创 【JUC系列第一篇】-Volatile关键字及内存可见性
作者:毕来生微信:878799579什么是JUC?JUC全称 java.util.concurrent 是在并发编程中很常用的实用工具类2.Volatile关键字1、如果一个变量被volatile关键字修饰,那么这个变量对所有线程都是可见的。2、如果某条线程修改了被Volatile修饰的这个变量值,修改后的值对于其他线程来时是立即可见的。3、并不是经过Volatile...
2019-01-02 19:56:10
286
原创 JVM系列-001-JVM监控工具
JVM系列-001-JVM监控工具在我们安装的jdk里面的bin目录下有一个jconsole.exe程序。这就是一个JVM的监控工具。我们可以直接打开它,如果配置了环境变量,也可以在命令中直接输入jconsole命令来打开它在控制台输入jconsole,当我们打开jconsole之后,界面如下:本地进程中列出了本地所有运行的java进程(使用jps命令可以查看到当前所有的java...
2018-10-23 07:06:02
300
原创 Java8-CompletableFuture
import java.util.concurrent.CompletableFuture;import java.util.concurrent.ExecutionException;public class CompletableFuture1 { public static void main(String[] args) throws ExecutionException, Inte
2017-12-16 11:04:39
363
原创 Java8-ConcurrentUtils
import java.util.concurrent.ExecutorService;import java.util.concurrent.TimeUnit;public class ConcurrentUtils { public static void stop(ExecutorService executor) { try { executo
2017-12-16 11:03:55
416
原创 Java8-LongAccumulator
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.LongAccumulator;import java.util.function.LongBinaryOperator;import java.util.st
2017-12-16 11:03:19
578
原创 Java8-Atomic
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.atomic.AtomicInteger;import java.util.stream.IntStream;public class Atomic1 { private
2017-12-16 10:59:41
362
原创 Java8-ConcurrentHashMap
import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ForkJoinPool;public class ConcurrentHashMap1 { public static void main(String[] args) { System.out.println("Paralle
2017-12-16 10:59:18
356
原创 Java8-Synchronized-No.02
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.stream.IntStream;public class Synchronized2 { private static final int NUM_INCREMENTS = 10000;
2017-12-16 10:58:24
299
原创 Java8-Synchronized-No.01
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.stream.IntStream;public class Synchronized1 { private static final int NUM_INCREMENTS = 10000;
2017-12-16 10:57:42
375
原创 Java8-Executors-No.03
import java.util.Arrays;import java.util.List;import java.util.concurrent.Callable;import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concu
2017-12-16 08:01:56
309
原创 Java8-Executors-No.02
import java.util.concurrent.ExecutionException;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.Future;import java.util.concurrent.TimeU
2017-12-16 07:58:23
259
原创 Java8-Executors-No.01
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.TimeUnit;public class Executors1 { public static void main(String[] args) { te
2017-12-16 07:57:35
327
原创 Java8-Optional-No.02
import java.util.Optional;import java.util.function.Supplier;public class Optional2 { static class Outer { Nested nested = new Nested(); public Nested getNested() { retur
2017-12-14 09:31:51
310
原创 Java8-Optional-No.01
import java.util.Optional;public class Optional1 { public static void main(String[] args) { Optional<String> optional = Optional.of("bam"); optional.isPresent(); // true
2017-12-14 09:31:09
272
原创 Java8-Concurrency
import java.util.UUID;import java.util.concurrent.ConcurrentHashMap;public class Concurrency1 { public static void main(String[] args) { ConcurrentHashMap<Integer, UUID> concurrentHashMap =
2017-12-14 09:28:59
376
原创 Java8-Annotations
import java.lang.annotation.ElementType;import java.lang.annotation.Repeatable;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;p
2017-12-14 09:28:18
353
原创 Java8-Lambda-No.05
import java.util.HashMap;import java.util.function.BiConsumer;public class Lambda5 { //Pre-Defined Functional Interfaces public static void main(String... args) { //BiConsumer Example
2017-12-14 09:27:23
288
原创 Java8-Lambda-No.04
public class Lambda4 { static int outerStaticNum; int outerNum; void testScopes() { int num = 1; Lambda2.Converter<Integer, String> stringConverter = (from) -> S
2017-12-14 09:26:52
309
原创 Java8-Lambda-No.03
import java.util.Comparator;import java.util.Objects;import java.util.UUID;import java.util.concurrent.Callable;import java.util.function.Consumer;import java.util.function.Function;import java.u
2017-12-14 09:26:27
303
原创 Java8-Lambda-No.02
public class Lambda2 { @FunctionalInterface public static interface Converter<F, T> { T convert(F from); } static class Something { String startsWith(String s) {
2017-12-14 09:26:00
300
原创 Java8-Lambda-No.01
import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;import java.util.Optional;public class Lambda1 { public static void main(String[] args) {
2017-12-14 09:25:25
342
原创 Java8-Thread-No.01
import java.util.concurrent.TimeUnit;public class Threads1 { public static void main(String[] args) { test1();// test2();// test3(); } private static void test3() {
2017-12-13 09:05:14
592
原创 Java8-Lock-No.06
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.StampedLock;public class Lock6 { private static int count = 0; public static
2017-12-13 09:04:40
202
原创 Java8-Lock-No.05
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.StampedLock;public class Lock5 { public static void main(String[] args) {
2017-12-13 09:04:19
228
原创 Java8-Lock-No.04
import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.StampedLock;public class Lock4 {
2017-12-13 09:03:52
151
原创 Java8-Lock-No.03
import java.util.HashMap;import java.util.Map;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.ReadWriteLock;import java.util.con
2017-12-13 09:03:24
194
原创 Java8-Lock-No.02
import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.ReentrantLock;public class Lock2 { public static void main(String[] args) {
2017-12-13 09:03:02
222
原创 Java8-Lock-No.01
package com.winterbe.java8.samples.concurrent;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.locks.ReentrantLock;import java.util.strea
2017-12-13 09:02:34
213
原创 Java8-Stream-No.13
package com.winterbe.java8.samples.stream;import java.security.SecureRandom;import java.util.Arrays;import java.util.stream.IntStream;public class Streams13 { public static void main(String[] args
2017-12-13 08:58:00
219
原创 Java8-Stream-No.12
package com.winterbe.java8.samples.stream;import java.util.ArrayList;import java.util.Arrays;import java.util.List;import java.util.UUID;import java.util.concurrent.ForkJoinPool;import java.util.c
2017-12-13 08:57:43
222
Python之Selenium 所需chromdriver2.3和chrom59版本浏览器安装包
2017-06-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人