自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

王的博客

工作中用到的代码

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

原创 程序员经典面试题--深入理解JVM系列(三)类加载机制

如果觉得写的还可以请关注微信公众号:程序猿的日常分享,定期更新分享。JVM在加载类时默认采用的是双亲委派机制。通俗的讲,就是某个特定的类加载器在接到加载类的请求时,首先将加载任务委托给父类加载器,依次递归,如果父类加载器可以完成类加载任务,就成功返回;只有父类加载器无法完成此加载任务时,才自己去加载。关于虚拟机默认的双亲委派机制,我们可以从系统类加载器和标准扩展类加载器为例作简单分析。java自带类加载器类加载器负责加载所有的类,其为所有被载入内存中的类生成一个java.lang.Class实例

2021-03-24 08:29:19 253

原创 程序员经典面试题——java并发编程-线程池(二)ThreadPoolExecutor参数详解

如果觉得写的还可以请关注微信公众号:程序猿的日常分享,定期更新分享。上一篇介绍了Executor框架,说到了Executor框架的成员,那么它最核心的成员就是ThreadPoolExecutor,它是线程池的实现类。ThreadPoolExecutor主要参数ThreadPoolExecutor主要有6个参数,构造方法如下:public ThreadPoolExecutor(int corePoolSize, int maximu

2021-03-23 10:08:00 310

原创 java并发编程-线程池(一)Executor框架

如果觉得写的还可以请关注微信公众号:程序猿的日常分享,定期更新分享。为什么需要线程池在java中,使用线程来执行异步任务。java线程的创建与销毁需要一定的开销。如果每个任务都创建一个线程会带来哪些问题:1、如果我们为每一个任务都创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。2、过多的线程会占用过多的内存等资源,还会带来过多的上下文切换,同时还会导致系统不稳定。线程池解决问题思路针

2021-01-25 21:30:04 135

原创 java并发编程-final关键字

final的作用1、final可以修饰类,方法和变量。2、final修饰的类,不能被继承,即它不能拥有自己的子类。3、final修饰的方法,不能被重写。4、final修饰的变量,无论是类属性、对象属性、形参还是局部变量,都需要进行初始化操作。 不变性如果对象在被创建之后,其状态就不能修改了,那么它就具备“不变性”。举个简单例子:public class User { //使用final修饰变量 final int age = 20; public sta

2021-01-07 19:05:17 128

原创 java并发编程-线程的6种状态及转换

如果觉得写的还可以请关注微信公众号:程序猿的日常分享,定期更新分享。线程的6种状态就像生命一样,线程也有从出生到死亡的过程,这个过程就是线程的生命周期,在java中,线程的生命周期共有6种状态,分别是:初始(NEW):新创建了一个线程对象,但还没有调用start()方法。 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。 线程对象创建后,其他线程(比如main线程)调用了该对象的start()方法。该状态的线程位于可运行线程池

2021-01-07 09:58:19 126

原创 java并发编程-AQS

如果觉得写的还可以请关注微信公众号:程序猿的日常分享,定期更新分享。AQS是什么AQS的全称为(AbstractQueuedSynchronizer),这个类也是在java.util.concurrent.locks下面,他是用来构建锁或者其他同步组件的基础框架,他使用了一个int的state字段来表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。从名字上可以看出他是一个抽象类,那么我们看下继承他的子类有哪些如图所示,AQS 在 ReentrantLock、Reentran

2021-01-04 10:22:48 98

原创 java并发编程-Lock

关注微信公众号:程序猿的日常分享,定期更新分享。在java1.5之后,并发包中增加了Lock接口用来实现锁的功能,他提供了与synchronized关键字类似的同步功能,只是在使用的时候需要显式的获取和释放锁。虽然它缺少了隐式获取释放锁的便捷性,但是却拥有了锁获取和锁释放的可操作性、可中断的获取锁以及超时获取锁等多种synchronized关键字不具备的功能。Lock是什么通过源码我们可以知道,Lock是一个接口,他总共有6个Api组成。代码如下:public interface Lock

2021-01-02 10:42:13 105

原创 java并发编程-synchronized

关注微信公众号:程序猿的日常分享,定期更新分享。在java中synchronized关键字是同步锁,他可以让我们的程序运行起来线程安全,屏蔽多线程带来的问题,实现同步是要很大的系统开销作为代价的,甚至可能造成死锁,所以尽量避免无谓的同步控制。实现原理Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的互斥锁(Mutex Lock)来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态.

2020-12-31 11:31:23 110

原创 java并发编程-java内存模型JMM

关注微信公众号:程序猿的日常分享,定期更新分享。JMM是什么JMM 是和多线程相关的一组规范,需要各个 JVM 的实现来遵守 JMM 规范,以便于开发者可以利用这些规范,更方便地开发多线程程序。这样一来,即便同一个程序在不同的虚拟机上运行,得到的程序结果也是一致的。如果没有 JMM 内存模型来规范,那么很可能在经过了不同 JVM 的“翻译”之后,导致在不同的虚拟机上运行的结果不一样,那是很大的问题。因此,JMM 与处理器、缓存、并发、编译器有关。它解决了 CPU 多级缓存、处理器优化、指令重

2020-12-29 10:36:55 97

原创 数据结构之树型结构

关注V信公重号:程序猿的日常分享,定期更新分享。树的定义树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:1、每个结点有零个或多个子结点;2、没有父结点的结点称为根结点;3、每一个非根结点有且只有一个父结点;4、除了根结点外,每个子结点可以分为多个不相交的子树;为什么需要树因为它结合了另外两种数据结构的优点: 一种是有序数组,另一种是链表。在树中查找数据项的速

2020-12-28 11:49:10 1842

原创 ConcurrentHashMap解析

上一篇我们从HashMap的数据结构及线程安全方面进行了一个了解,我们都知道HashMap是线程不安全的,所以在多线程环境下,为了线程安全我们有3种选择:ConcurrentHashMap、HashTable、Collections.SynchronizedMap(new HashMap()),后两种的实现原理类似,就是几乎每个方法都被 synchronized 关键字所修饰了,这也就保证了线程安全。由于每个方法都加上同步锁,导致性能下降,所以从性能考虑我们的最优选择是ConcurrentHashMap,那

2020-12-27 12:29:42 78

原创 HashMap解析

HashMap解析原创:程序猿的日常分享HashMap是我们日常工作中使用非常多的容器,由于HashMap是线程不安全的,那么在多咸亨环境下ConcurrentHashMap则是替代HashMap的容器,这两个也是Map的最主要的实现类之一。本文将通过数据结构、线程安全的角度出发去了解这两个重要的集合类的原理。一、数据结构HashMap 和 ConcurrentHashMap 都有这样一个特点:最开始的 Map 是空的,因为里面没有任何元素,往里放元素时会计算key的hash 值,计算之后,

2020-12-23 10:36:15 202 1

原创 接收微信的推送

package com.wuage.wechat.service;import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.util.Calendar;import org.jdom.JDOMExce

2017-02-16 17:02:52 264

原创 jdom解析xml

package com.wuage.wechat.service;import java.io.IOException;import java.io.StringReader;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect

2017-02-16 16:57:27 130

原创 缓存微信accesstoken实现

一、背景微信公众号调用接口的accesstoken,失效期为7200秒,所以我们需要把它缓存起来,不用每次都去获取新的。二、方案将accesstoken保存再redis中,设置失效时间,并在代码中检测是否有缓存值,没有则去获取并更新redis。但会出现一个问题,在多进程的模式下,会出现并发去获取accesstoken的场景,这样会导致前边的值失效,但前边的值已经缓存到red

2017-02-16 16:13:45 3490 1

原创 HttpClient封装

一、maven地址 org.apache.httpcomponents httpclient 4.5.2 二、代码package com.wuage.wechat.service.center.utils;import java.io.IOException;import java.nio.charset.Charset;import org.a

2017-02-16 16:03:58 221

maven+springmvc+mybatis+mysql

使用maven springmvc spring mybatis mysql搭建的基础框架

2015-07-15

validform表单验证

进行form自动验证的插件,非常好用,还可以使用ajax实时验证

2014-03-28

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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