- 博客(15)
- 收藏
- 关注
转载 线程中断总结
在Java中,停止一个线程的主要机制是中断,中断并不是强迫终止一个线程,它是一种协作机制,是给线程传递一个取消信号,但是由线程来决定如何以及何时退出。Thread类定义了如下方法:public boolean isInterrupted();//测试此线程是否已被中断。此方法不影响线程的中断状态public void interrupt();//中断线程public ...
2018-08-05 17:43:00 140
转载 线程的基本协作和生产者消费者
协作基础(wait/notify)Java的根父类是Object,Java在Object类而非Thread类中,定义了一些线程协作的基本方法,使得每个对象都可以调用这些方法,这些方法有两类,一类是wait,另一类是notify。wait方法主要有两个:public final void wait() throws InterruptedExceptionpublic ...
2018-08-05 17:05:00 117
转载 synchronized总结
synchronized基础用法synchronized可以用于修饰类的实例方法、静态方法和代码块。它保护的是对象(包括类对象)而非代码,只要访问的是同一个对象的synchronized方法,即使是不同的代码,也会被同步顺序访问。每个对象有一个锁(又叫监视器)和一个锁等待队列,锁只能被一个线程持有,其他试图获得同样锁的线程需要等待,执行synchronized实例方法的过程大...
2018-08-05 15:51:00 135
转载 线程基础总结
线程基础线程表示一条单独的执行流,它有自己的程序执行计数器,有自己的栈java中线程的实现方式:继承Thread类并重写其run方法(Thread类也实现了Runnable接口,并提供了默认实现),调用Thread类的实例方法start()启动线程实现Runnable接口(重写run()方法),传递Runnable对象给Thread对象,调用Thread类的实例方法s...
2018-08-05 14:46:00 125
转载 Java集合总结(三):堆与优先级队列
堆满二叉树:满二叉树是指,除了最后一层外,每个节点都有两个孩子,而最后一层都是叶子节点,都没有孩子。完全二叉树:完全二叉树不要求最后一层是满的,但如果不满,则要求所有节点必须集中在最左边,从左到右是连续的,中间不能有空的。一个特性:给定任意一个节点,可以根据其编号直接快速计算出其父节点和孩子节点编号,如果编号为i,则父节点编号即为i/2,左孩子编号即为2*i,右孩子编号即为2...
2018-08-04 19:30:00 163
转载 Java集合总结(二):Map和Set
集合类的架构图:HashMap内部维护一个链表数组做哈希表,默认大小为16,最大值可以为2^30,默认负载因子0.75。可以通过构造方法指定初始大小和负载因子,当键值对个数大于等于临界值threshold(数组当前大小和负载因子的乘积)时对数组进行扩容,扩容策略为当前数组大小乘以2。数组的每一项都是一个链表,链表的每个结点(静态内部类Entry)都是键值对,并缓存...
2018-08-04 18:44:00 114
转载 Java集合总结(一):列表和队列
java中的具体容器类都不是从头构建的,他们都继承了一些抽象容器类。这些抽象容器类,提供了容器接口的部分实现,方便具体容器类在抽象类的基础上做具体实现。容器类和接口的关系架构图如下:虚线框表示接口,有Collection, List, Set, Queue, Deque和Map。有六个抽象容器类:AbstractCollection: 实现了Collection接口,...
2018-08-04 17:43:00 292
转载 java枚举类型总结
java中的枚举类型是jdk1.5新增的一个东西,其本质是一个java.lang.Enum类的子类,每个枚举项是一个静态常量对象,由编译器为每个枚举项分配ordinal和name,其中ordinal是枚举项声明时候的顺序,从0开始,name是枚举项的名称,可以通过同名无参方法name()和ordinal()来获取,这两个方法都是final的。我们还可以通过类型的静态valueO...
2018-07-30 18:58:00 100
转载 java 内部类简单总结
在java中,一个类可以放在另一个类的内部,称之为内部类,相对而言,包含它的类称之为外部类。不过对于Java虚拟机而言,它是不知道内部类这回事的, 每个内部类最后都会被编译为一个独立的类,生成一个独立的字节码文件。内部类可以方便的访问外部类的私有变量,可以声明为private从而实现对外完全隐藏,相关代码写在一起,写法也更为简洁。 在Java中,根据定义的位置和方式不同,主要有四种内部类...
2018-07-30 18:50:00 112
转载 java Integer包装类装箱的一个细节
java有八个基本数据类型,每个都有对应的一个包装类,比如int对应的Integer。从jdk1.5开始,java引入了自动拆装箱,可以直接进行形如Integer i = 20形式的赋值,编译器会自动将其转换为Integer i = Integer.valueOf(20)进行装箱,拆箱则是将int j = i的形式转换成了int j = i.intValue()。装箱有个细节,如果不...
2018-07-30 18:39:00 108
转载 java new一个对象的过程中发生了什么
java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。我们先假设是第一次使用该类,这样的话new一个对象就可以分为两个过程:加载并初始化类和创建对象。一、类加载过程(第一次使用该类) java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工...
2018-07-29 18:19:00 268
转载 从斐波那契数列看java方法的调用过程
先看斐波那契数列的定义:斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n...
2018-07-28 21:11:00 151
转载 java中Switch的实现原理浅谈
switch的转换和具体系统实现有关,如果分支比较少,可能会转换为跳转指令(条件跳转指令和无条件跳转指令)。但如果分支比较多,使用条件跳转会进行很多次的比较运算,效率比较低,可能会使用一种更为高效的方式,叫跳转表。跳转表是一个映射表,存储了可能的值以及要跳转到的地址,形如:值1代码块1的地址值2代码块2的地址...值n...
2018-07-28 18:02:00 547
转载 漫谈计算机编码:从ASCII码到UTF-8
第一阶段 盘古开天辟地——ASCII码计算机大家都知道,本质是二进制运算和存储。在计算机中人类的几乎所有文字和字符都没法直接表示,所以美国人在发明计算机的时候为了让计算机可以用于保存和传输文字,就发明了ASCII码(American Standard Code for Information Interchange,美国信息交换标准代码),用128个数字分别映射到美国人常用的一些字符...
2018-07-28 17:17:00 183
转载 Java中的位运算及简单的算法应用介绍
众所周知,计算机底层是二进制。而java作为一门计算机编程语言,也对二进制的位运算提供了完整的支持。在java中,int是32位的,也就是说可以用来实现32位的位运算。方便起见,我们一般用16进制对它赋值,比如: 0011表示成16进制是 0x3, 110111表示成16进制是 0x37。那么什么是位运算呢?位运算是将数据看做二进制,进行位级别的操作。主要有移位运算和逻辑运算...
2018-07-27 20:58:00 199
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人