William的小星球 
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •     

线程中断interrupt

以下内容完全来自于《java核心技术卷Ⅰ 》 当线程的run方法执行方法体中最后一条语句后,并经由执行return语句返回时,或者出现了在方法中没有捕获的异常时,线程将终止。在Java的早期版本中,还有一个stop方法,其他线程可以调用它终止线程。但是,这个方法现在已经被弃用了。 有一种可以强制线程终止的方法。然而, interrupt方法可以用来请求终止线程。 当对一个线程调用interrupt方法时线程的中断状态将被置位。这是每一个线程都具有的boolean标志。每个线程都应该不时地检查这个标志,以判断线程是否被中断。 要想弄清中断状态是否被置位,首先调用静态的Thread.curr
 2018-05-31   java并发   

Java不可变对象

定义:如果某个对象在被创建后,其状态(实例变量)不能被修改,那么这个对象就称为不可变对象。 优点: 不可变对象一定是线程安全的(不可变,别的线程修改不了)。 可作为Map的键值和Set的元素。 编写不可变类: 所有字段都是private final。 没有任何public的方法来修改字段。 不依赖外部可变对象的引用。(如果依赖外部可变对象,那么当外部可变对象修改时,引用变量会指向新的对象,违反不可变对象的定义) 不能逸出任何可变对象的引用变量。(逸出引用变量后,外部可以通过引用变量修改对象)。import java.util.Date; public final class I
 2018-05-29   Java   

AVL树

参考:https://www.cnblogs.com/skywang12345/p/3577479.html AVL树本质上还是一棵二叉搜索树,它的特点是:1.本身首先是一棵二叉搜索树。2.带有平衡条件:每个结点的左右子树的高度之差的绝对值(平衡因子)最多为1。也就是说,AVL树,本质上是带了平衡功能的二叉查找树(二叉排序树,二叉搜索树)。 以下为四种不平衡的临界条件,分别为LL(leftleft),LR(leftright),RL,RR。当每次到达这四种不平衡的临界条件时,都进行旋转树操作,那么树就能维持平衡: private AVLTreeNode leftLeftRotation(AVL
 2018-05-27   算法   

二叉树前序、中序、后序遍历,和直观打印。

//前序遍历 public static void preOrderedPrint(TreeNode root){ if (root!=null){ System.out.print(root.value); preOrderedPrint(root.leftNode);//删去了多余的if(root.leftNode!=null)的条件判断。 preOrderedPrint(root.rightNode); } } //中序遍历 public static void inOrderedPrint(TreeNode root){
 2018-05-27   算法   

HashMap半解析

此篇文章是对源码的分析,但并没有贴大量源码。3个接口前两个就不用多说了,Map<K,V>接口也应该对着中文版api文档看一下就明白了。 先看直接父类AbstractMap<K,V>: AbstractMap<K,V>内部类: SimpleEntry<K,V>:实现Entry接口,Entry的英文单词是条目的意思,接口里面都是一些对规定好的操作方法,看文档就行了。在类中只有final key和value两个字段,其中由于key是final的,因此初始化之后就不可变。实例方法都是对这两个变量的基本操作,没什么特别的。简单来说就是对key和value的
 2018-05-27   Java   

Java,重载的陷阱,静态分派,重写,动态分派。

本文描述的内容如题:重载的陷阱,静态分派,重写,动态分派public class StaticDispatch { static abstract class Human{} static class Man extends Human{} static class Woman extends Human{} public void sayHello(Human guy){ System.out.println("hello,guy!"); } public void sayHello(Man guy){
 2018-05-23   JVM   

线程生命周期和同步监视器是什么

###线程生命周期新建:Thread thread=new Thread();,用new关键字创建一个线程后,构造方法中将当前thread对象加入ThreadGroup,虚拟机为其分配内存。就绪:调用线程实例的start(),JVM为其创建方法调用栈和程序计数器,线程何时开始运行取决于JVM里线程调度器的调度。阻塞:如果处于就绪状态的线程获得了CPU,开始执行run方法的线程执行体,则该线程处于运行状态,如果计算机只有一个CPU,那么在任何时刻只有一个线程处于运行状态。当然,在一个多处理器的机器上,将会有多个线程并行执行;当线程数大于处理器数时,依然会存在多个线程在同一个CPU上轮换的现象。当
 2018-05-21   java并发   

内部类和静态内部类的加载

public class Main { static { System.out.println("加载外部类"); } public Main() { System.out.println("外部类构造方法"); } public void newInnerClassInstance() { InnerClass innerClass = new InnerClass(); } public void loadStaticInnerClass(){
 2018-05-21   Java   

java变量初始化时的赋值

 2018-05-19   JVM   

java类初始化

虚拟机规范严格规定了有且只有5种情况必须立即对类进行初始化(而加载、验证、准备自然需要在此之前开始): 使用new关键字实例化对象的时候、读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候。 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先出发其初始化。 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。 当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类。 当使用JDK1.7的
 2018-05-19   JVM   
1…910111213…21

搜索

Hexo Fluid