- 博客(47)
- 收藏
- 关注
原创 线程状态
**Java线程的生命周期有如下六种****Java线程的生命周期一直在不同的状态间
2020-05-14 21:50:59
243
原创 线程上下文切换
多线程编程中,一般线程的个数都大于CPU的个数,而一个CPU核心在任意时刻只能被一个线程使用,为了让这些线程都能得到有效执行,CPU才去的策略是为每个线程分配时间片并轮转的形式。当一个线程的时间用完时就会重新处于就绪状态,CPU的使用交给其他线程,完成一次上下文切换。概括来说就是:当前任务在执行完 CPU 时间片切换到另一个任务之前会先保存自己的状态,以便下次再切换回这个任务时,可以再加载这个任务的状态。任务从保存到再加载的过程就是一次上下文切换。上下文切换通常是计算密集型的。也就是说,它需要相当可观的
2020-05-14 21:47:09
334
原创 关于死锁
1.什么是死锁线程死锁描述的是这样一种情况:多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RF3veVpN-1589463851327)(/img/java/2019-4死锁1.png)]2.死锁产生的条件互斥条件:该资源任意
2020-05-14 21:44:19
256
原创 sleep&wait
1.关于sleep()和wait()两者最主要的区别在于:sleep 方法没有释放锁,而 wait 方法释放了锁 。两者都可以暂停线程的执行。Wait 通常被用于线程间交互/通信,sleep 通常被用于暂停执行。wait() 方法被调用后,线程不会自动苏醒,需要别的线程调用同一个对象上的 notify() 或者 notifyAll() 方法。sleep() 方法执行完成后,线程会自动苏醒。或者可以使用 wait(long timeout)超时后线程会自动苏醒。2.关于start()与run(
2020-05-14 21:43:13
254
原创 JVM
一、Java的内存区域先放一张图1.运行时数据区域按照线程的公私有进行划分线程私有的程序计数器、虚拟机栈、本地方法栈线程共享的堆、方法区、直接内存1.1程序计数器程序计数器是一块较小的内存区域,可以看作是当前线程所执行字节码的行号指示器。字节码解释器工作时通过改变这个计数器的值来获取下一条需要执行的字节码指令,分支,循环,跳转,异常处理,线程恢复等功能都需要依赖计数器完成。为...
2020-05-06 23:30:51
200
原创 HashMap的长度为什么是2的次幂
我们知道Hash 值的范围值-2147483648到2147483647,只要hash值映射的比较松散是很难出现hash冲突的,这样数组的长度加起来会超过40亿,内存中无法存放,所以使用hash值之前与数组长度进行取余操作,结果作为数组的下标,数组下标的计算方法是(n-1)& hash ,n为数组长度,大家可能会疑惑,为什么不是 hash%n ,其是是这样的,hash%n==hash&am...
2020-05-05 22:54:01
225
原创 HashMap的底层实现
HashMap在1.8和1.8之前的变化1. JDK1.8之前HashMap底层是使用数组和链表结合在一起使用,即链表散列。HashMap通过key的HashCode经过扰动函数hash(int h)处理后得到hash值,然后通过((n-1)& hash)确定该元素存放的位置,if 当前位置已存在元素,就判断当前位置的元素hash值以及key 是否相同,如果相同则直接覆盖,不相同就通过...
2020-05-04 16:55:57
190
原创 HashMap与HashSet的区别
HashSet检查重复HashSet的底层是基于HashMap实现的。当把对象加入HashSet时,调用add(E e)方法,发现调用的是map的put方法public class HashSet<E> extends AbstractSet<E> implements Set<E>, Cloneable, java.io.Serializ...
2020-05-04 16:31:45
278
原创 HashMap与HashTable的区别
1.HashMap与HashTable的对比对比点HashMapHashTable线程安全否是效率高低null key, null value的支持是否2.HashMap与HashTable扩容的不同点创建时如果不指定初始容量HashTable的初始容量为11,负载因子为0.75扩容的时机,当entry的数量大于阈值((int)(capa...
2020-05-04 12:13:56
167
原创 ArrayList的扩容机制
一 先从 ArrayList 的构造函数说起ArrayList有三种方式来初始化,构造方法源码如下: /** * 默认初始容量大小 */ private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELE...
2020-05-02 14:55:00
225
原创 java 集合框架之List,Set,Map
List,Set,Map的区别List (顺序):List接口存储一组不唯一,有序的对象Set(无序):不允许重复的集合。不会有多个元素引用相同的对象。Map(key-value键值对):Map会维护与Key有关联的值,两个key可以引用相同的对象,key不能重复,key可以是String也可以是任何对象。ArrayList与LinkedList的区别ArrayList与Linke...
2020-05-02 14:52:41
293
原创 java queue
Java queueQueue设计用于在处理之前保留元素的集合。 除了基本的Collection操作之外,队列还提供额外的插入,提取和检查操作。 这些方法中的每一种都有两种形式:如果操作失败,则抛出一个异常,另一种返回一个特殊值( null或false ,具体取决于操作)。 插入操作的后一种形式专门设计用于容量限制的Queue实现; 在大多数实现中,插入操作不能失败Queue的实现Ab...
2020-05-02 13:57:41
178
原创 Arrays.asList使用
1.看到这这个Arrays就会想到这是操作数组的工具类,但是这个工具类有你想不到的坑。假如你这么使用 public static void main(String[] args) { String[] array = {"1", "2", "3"}; List<String> list = Arrays.asList(array); ...
2020-04-18 13:56:07
184
原创 BigDecimal的用处
1.浮点数比较存在的问题 public static void main(String[] args) { float a = 1.0f - 0.9f; float b = 0.9f - 0.8f; System.out.println(a);// 0.100000024 System.out.println(b);// ...
2020-04-15 22:05:44
676
原创 Java中的IO流
1.流的分类按照流的方向:输入流和输出流按照操作单元划分:字节流和字符流按照流的角色:节点流和处理流Inputstream/Reader 输入流,前者为字节输入流,后者为字符输入流Outputsteam/Writer 输出流,前者为字节输出流,后者为字符输出流流的分类结构图摘自《https://snailclimb.gitee.io/javaguide》...
2020-04-15 21:13:05
156
原创 String,StringBuilder,StringBuffer的区别
1.StringString中使用final char value[]来存储字符串,所以String字符串是不可变的public final class String implements java.io.Serializable, Comparable<String>, CharSequence { /** The value is used for cha...
2020-04-14 20:00:30
133
原创 重载与重写的区别
区别点 重载overload 重写override 发生位置 同一个类中 子类 参数列表 必须修改 一定不能修改 返回类型 可修改 不可修改 异常类型 可修改 异常范围小于等于父类 访问修饰符 可修改 大于等于父类 发生阶段 编译器 运行期 1.重写重写发生在运行期,是子类对父类的允...
2020-04-13 23:07:36
185
原创 Java基本数据类型比较
基本类型 位数(bit) 最小值 最大值 包装器 boolean -- -- -- Boolean byte 8bit -128 +127 Byte char 16bit unicode Character short 16bit -2^15 +2^15-1 ...
2020-04-13 22:49:01
258
原创 JVM,JDK,JRE你区分过吗?
JVM 运行Java字节码的虚拟机,JVM针对于不同的操作系统具有不同的实现,.class文件不面向任何特定的处理器,只面向jvm,从而保证了java的平台无关性。 JDK 功能齐全的Java SDK拥有jre的一切,包含编译器和其他工具,能够创建和编译程序。 JRE Java运行时环境,运行已编译的Java程序的内容集合,包括JVM,Java类库等,不能用于创建新程序。...
2020-04-13 21:22:00
182
原创 面向对象与面向过程的区别
特点 面向对象 面向过程 维护 Y N 扩展 Y N 复用 Y N 性能 N?? Y?? 关于性能问题:1.面向对象(表象):类调用时需要实例化,开销比较大,比较耗费资源。2.根本原因:Java是半编译语言最终执行的代码不是cpu能够执行的二进制机械码3.面向过程语言大多数编译成机械码直接运行,并不是所有的...
2020-04-13 20:44:20
143
原创 多线程问题
1.线程安全概念:当多个线程访问某一个类(对象或方法)时,这个对象始终都能表现出正确的行为,那么这个类(对象或方法)就是线程安全的。2.synchronized:可以在任意对象及方法上加锁,而加锁的这段代码称为"互斥区"或"临界区"。3.关键字synchronized取得的锁都是对象锁,而不是把一段代码(方法)当做锁, 所以代码中哪个线程先执行synchronized关键字的方法,哪个线...
2020-03-12 16:43:09
210
原创 mybatis 执行流程 源码分析
mybatis执行流程,源码分析一直在用mybatis,始终没有对mybatis的执行流程进行过深入了解,周末闲来无事,进行一次记录。1.加载配置文件InputStream in = Resources.getResourceAsStream("sqlMapConfig.xml");2.创建SqlSessionFactorySqlSessionFactory sqlSessionFac...
2019-08-18 14:15:26
194
转载 spring 中文文档
Spring官方文档:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/一、Spring框架概述Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用。Spring是模块化的,所...
2018-10-29 14:16:14
1225
1
原创 activeMq
1.activeMq简介:ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现。2.JMS1.1规范相关概念:jms(Java Message Service)提供者:实现JMS规范的消息中间件服务器. 客户端:发送或者接受消息的应用程序. 生产者/发布者:创建并发...
2018-10-17 11:16:28
521
原创 java堆
java堆堆空间可分为新生代和老年代新生代划分为Eden、survivor(s0、s1)对象创建时进入Eden区,经过1次gc若对象存活则进入s0/s1区每经历1次gc对象的年龄加1,15次GC后对象进入老年代垃圾回收时的核心算法:复制算法(新生代对象产生于销毁过快) s0-->s1,s1-->s0的清空与复制survivor区存在必要性:如果没有Sur...
2018-10-03 17:02:33
559
原创 远程调试
CATALINA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=11880,server=y,suspend=n"catalina.sh
2018-07-17 10:49:18
215
原创 单例模式
单例模式:确保程序中一个类最多只有一个实例四种单例模式1.线程不安全(懒汉式,线程不安全)public class UnsafeSingleton { private static UnsafeSingleton singleton; private UnsafeSingleton(){} public static UnsafeSingleton getInstanc...
2018-06-05 21:49:56
210
原创 获取两个list不相同的元素
获取两个list不相同的元素 public static List getDiffElemList(List list1, List list2){ List listAll = new ArrayList(); List resultList= new ArrayList(); listAll.addAll(list1); listAll.addA...
2018-06-04 10:54:32
656
原创 设计模式-观察者模式
参考Head First 设计模式观察者模式:定义对象之间一对多的依赖,当“一”发生改变时,所有的依赖者都会收到通知并自动改变,主题与订阅者关系。定义主题接口Subject/** * @description: * @author: zhangyh * @create :2018/6/2 */public interface Subject { public void regis...
2018-06-02 18:00:29
222
原创 代理
使用代理模式必须要让代理类和目标类实现相同的接口,客户端通过代理类来调用目标方法,代理类会将所有的方法调用分派到目标对象上反射执行,还可以在分派过程中添加"前置通知"和后置处理(如在调用目标方法前校验权限,在调用完目标方法后打印日志等)等功能。1.静态代理代理类与被代理类实现同一个接口在被代理类作为代理类中的属性,重写默认构造器接口public interface Count...
2018-06-02 17:19:19
237
原创 nginx实现负载均衡
Tomcat9001,Tomcat9002负载均衡服务器nginx通过域名www.yoess.vip进行访问配置nginx服务器 修改nginx.conf文件 #配置nginx负载均衡 upstream tomcat_server_pool{ server 192.168.150.128:9001 weight=10; server 192.168.150.12...
2018-05-21 21:57:52
285
原创 nginx 反向代理
通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中由代理服务器向Internet上的web服务器发起请求,最终达到客户机上网的目的。 而反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务...
2018-05-20 22:38:54
203
原创 centOS nginx环境搭建
1.下载nginx1.9.82.上传至Linux /my/nginx3.解压nginxtar -zxvf nginx-1.9.8.tar.gz 4.nginx环境安装1)安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gccyum install gcc-c++2)PCRE(PerlCompatible Regular...
2018-05-20 17:09:11
204
原创 centOS搭建Redis集群时遇到的问题
1.Redis的保护模式针对之前Redis版本,默认无bind和密码设置存在很大安全风险;Redis3.2版本提出新特性protected mode(保护模式)。如果Redis在启动时,未开启bind和密码设置功能,只能通过回环地址本地访问,如果尝试远程访问redis,会提示以下错误:DENIED Redis is running protected mode because protected ...
2018-05-20 17:01:54
281
原创 centOS安装Redis集群
1.集群节点规划主节点192.168.236.130:7001 192.168.236.130:7002 192.168.236.130:7003从节点192.168.236.130:7004 192.168.236.130:7005 192.168.236.130:70062.在/my/redis下创建redis-cluster目录 mkdir redis-cluster3.在Redis-c...
2018-05-19 22:00:26
247
原创 centOS安装jdk1.8
1.下载jdk1.8jdk1.82.创建文件夹mkdir -p /my/java3.上传jdk1.8到Java文件夹cd /my/javarz选择已下载的jdk文件 jdk-8u171-linux-x64.tar.gz4.解压文件 tar -zxvf jdk-8u171-linux-x64.tar.gz 5.卸载自带的jdkrpm -qa|grep jdk[root@localhost java...
2018-05-19 11:25:20
201
转载 开源项目列表
转载:http://blog.longjiazuo.com/archives/26251. Apache的开源软件列表http://www.oschina.net/project/apache2. Java开源Apache项目http://www.open-open.com/56.htm3. 阿里巴巴的开源软件列表http://www.oschina.net/project/alibaba4. 百...
2018-05-17 15:22:46
474
原创 Java 线程池的区别
常见的Java线程池:newCachedThreadPool:可缓存线程池ExecutorService cachedThreadPool = Executors.newCachedThreadPool();如果线程池中线程数量大于任务数量,会自动回收空闲线程,任务数大于线程数量时会自动创建线程;特点:1.线程的数量无上限(Integer.MAX_VALUE)2.线程池中在一定时间内没有提交任务则...
2018-04-09 19:27:57
312
转载 Linux下安装rabbitmq
https://blog.youkuaiyun.com/qq_34021712/article/details/72567786
2018-04-01 19:52:17
171
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人