![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 89
树森
不积跬步,无以至千里;不积小流,无以成江海
展开
-
Java线程池ThreadPoolExecutor
一、线程池的工作原理线程池刚创建时,里面没有一个线程。任务队列是作为参数传进来的。不过,就算队列里面有任务,线程池也不会马上执行它们。当调用 execute() 方法添加一个任务时,线程池会做如下判断: 如果正在运行的线程数量小于 corePoolSize,那么马上创建线程运行这个任务。 如果正在运行的线程数量大于或等于 corePoolSize,那么将这个任务放入队列。 ...原创 2018-04-15 00:04:20 · 200 阅读 · 0 评论 -
Java多线程并发:进程调度算法
一 优先调度算法1.先来先服务调度算法(FCFS)当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用 FCFS 算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机,特点是:算法比较...原创 2019-05-22 00:13:38 · 651 阅读 · 0 评论 -
基本类型int和包装类型integer的比较 - == or equals
java中有两种类型基本类型:基本数据类型存的是数值本身引用类型:引用类型变量在内存放的是数据的引用基本类型通过==比较的是它们的值大小,而引用类型比较的是他们的引用地址。 基本类型和包装类型通过==比较的是值的大小,通过equals比较的也是值得大小。public boolean equals(Object obj) { if (obj instanceof In...原创 2018-05-15 19:24:17 · 3086 阅读 · 0 评论 -
解读Java中的clone方法
对象的创建clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象。所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象。那么在java语言中,有几种方式可以创建对象呢?使用new操作符创建一个对象使用clone方法复制一个对象那么这两种方式有什么相同和不同呢? new操作符的本意是分配内存。程序执行到new操作符时...原创 2018-04-26 22:44:41 · 354 阅读 · 0 评论 -
从String源码看-为什么JDK中的String不可变
什么是不可变对象? 我们都知道, 在Java中, String类是不可变的。那么到底什么是不可变的对象呢? 可以这样认为:如果一个对象,在它创建完成之后,不能再改变它的状态,那么这个对象就是不可变的。不能改变状态的意思是,不能改变对象内的成员变量,包括基本数据类型的值不能改变,引用类型的变量不能指向其他的对象,引...原创 2018-04-26 22:10:28 · 400 阅读 · 0 评论 -
初识Java垃圾回收
垃圾回收机制是 Java 非常重要的特性之一,也是面试题的常客。它让开发者无需关注空间的创建和释放,而是以守护进程的形式在后台自动回收垃圾。这样做不仅提高了开发效率,更改善了内存的使用状况。本文将从以下几个方面对垃圾回收机制进行讲解,希望读完可以对垃圾回收有个初步认识。一、什么是Java堆内存堆是在 JVM 启动时创建的,主要用来维护运行时数据,如运行过程中创建的对象和数组都是基于...原创 2018-05-10 21:37:23 · 215 阅读 · 0 评论 -
重写equals()方法就必须重写hashCode()方法
最近看了Object类的源码,对hashCode() 和equals()方法有了更深的认识。重写equals()方法就必须重写hashCode()方法的原因,需要从源头Object类讲起。public native int hashCode();public boolean equals(Object ...原创 2018-04-26 00:04:58 · 574 阅读 · 0 评论 -
Java中的Object类
一、Object类的概述Java的Object是所有其他类的父类,从继承的层次来看它就是最顶层根类,所以它也是唯一一个没有父类的类。所有类都默认直接或间接继承Object类。 如上图所示,Object类定义了对象常用的一些方法,包括非final方法:equals,hashCode,toString,clone(访问限制级别:protected)和finalize(访问限制级别:prote...原创 2018-04-25 23:44:55 · 966 阅读 · 0 评论 -
HashMap的死循环-HashMap Infinite Loop
问题的症状从前我们的Java代码因为一些原因使用了HashMap这个东西,但是当时的程序是单线程的,一切都没有问题。后来,我们的程序性能有问题,所以需要变成多线程的,于是,变成多线程后到了线上,发现程序经常占了100%的CPU,查看堆栈,你会发现程序都Hang在了HashMap.get()这个方法上了,重启程序后问题消失。但是过段时间又会来。而且,这个问题在测试环境里可能很难重现。Ha...原创 2018-05-02 23:22:29 · 374 阅读 · 0 评论 -
对JAVA集合进行遍历删除
本文转自对JAVA集合进行遍历删除时务必要用迭代器 有以下代码:public static void main(String args[]) { List<String> famous = new ArrayList<String>(); famous.add("liudehua"); famous.add("madehua"); ...转载 2018-05-08 23:29:50 · 297 阅读 · 0 评论 -
CSRF 攻击
本文转自CSRF 攻击的应对之道CSRF 背景与介绍CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的概念。即便是大...转载 2018-05-08 23:02:10 · 166 阅读 · 0 评论 -
Java创建线程的方式
1、创建线程的方式继承Thread,重写run方法实现Runnable接口,重写run方法实现Callable接口,重写call方法(在执行完任务之后能够获取执行结果)2、具体实现及使用2.1、继承Thread,重写run方法public class MyThread extends Thread { @Override public void r...原创 2018-04-23 21:18:13 · 179 阅读 · 0 评论 -
Java线程池的实现原理
线程是稀缺资源,如果被无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,合理的使用线程池对线程进行统一分配、调优和监控,有以下好处:降低资源消耗提高响应速度提高线程的可管理性Java1.5中引入的Executor框架把任务的提交和执行进行解耦,只需要定义好任务,然后提交给线程池,而不用关心该任务是如何执行、被哪个线程执行,以及什么时候执行。demo Executo...原创 2018-04-15 00:47:48 · 219 阅读 · 0 评论 -
Java多线程并发:CyclicBarrier、CountDownLatch、Semaphore 的用法
关注微信公众号:「树森笔记」1、CountDownLatch(线程计数器 )CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。 final CountDownLatch latch = new CountDow...原创 2019-05-17 09:53:03 · 264 阅读 · 0 评论