jdk1.7源码
冰凌其
这个作者很懒,什么都没留下…
展开
-
string(二)成员方法
1、长度public int length() { return value.length; }如上的方法是返回字符串的长度,但是需要注意的是:String类中的length()方法也是对字符串进行char统计,也就是计算代码单元数量(代码单元有可能大于正真的字符数量,如果字符串中有增补字符的话)。如果要计算代码点数量,必须用str.codePointCoun...原创 2018-07-23 11:40:36 · 351 阅读 · 0 评论 -
多线程(七)ReadWriteLock 和 ReentrantReadWriteLock
1、ReadWriteLockReadWriteLock 维护了一对相关的锁,一个用于读操作,另一个用于写操作。只要没有 writer线程,读锁可以由多个 reader 线程同时保持。但写锁是独占的。//这是源码,最重要的是实现类public interface ReadWriteLock { /** 返回用于读取操作的锁。 */ Lock rea...原创 2018-08-01 23:30:25 · 212 阅读 · 0 评论 -
多线程(六)Condition 和 LockSupport
1、ConditionCondition 将 Object 监视器方法(wait、notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set(wait-set)。其中,Lock 替代了 synchronized 方法和语句的使用,Condition 替代了 Object 监视器方法的使用。条件(也称为条件...原创 2018-08-01 23:01:18 · 381 阅读 · 0 评论 -
多线程(五)Lock 和 ReentrantLock
线程锁是用来实现同步机制的,前面讲到过使用synchronized关键字来实现同步。使用这个关键字实现的同步块有一些缺点:(1)锁只有一种类型(2)线程得到锁或者阻塞(3)不能实现很好的并发为了解决如上的各种问题,后来又提出了一种更为复杂的锁 - 线程锁。线程锁可以在几个方面进行提升:(1)添加不同类型的锁,如读取锁和写入锁(主要实现类为ReentrantReadWri...原创 2018-08-01 21:47:57 · 370 阅读 · 0 评论 -
多线程(四)volatile关键字
volatile关键字保证线程的原子性。在java.util.concurrent包里包含的主要就是一些与并发实现相关的类,首先来看一下最为基础的原子类(java.util.concurrent.atomic)根据修改的数据类型,可以将java.util.concurrent.atomic包中的原子操作类可以分为4类。1. 基本类型: AtomicInteger, AtomicLong, ...原创 2018-08-01 18:57:57 · 192 阅读 · 0 评论 -
多线程(三)工作空间
1、首先解读Java内存模型(这里区别于JVM的内存模型,堆、栈、工作区) Java 内存模型来屏蔽掉各种硬件和操作系统的内存差异,达到跨平台的内存访问效果。JLS(Java语言规范)定义了一个统一的内存管理模型JMM(Java Memory Model) Java内存模型规定了所有的变量都存储在主内存中,此处的主内存仅仅是虚拟机内存的一部分,而虚拟机内存也仅仅是计算机物理内存的一部分...原创 2018-08-01 12:05:19 · 1132 阅读 · 0 评论 -
Unsafe
从这个类的名字Unsafe上来说这个类就是一个不安全的类,也是不开放给用户直接使用的(当然我们还是可以通过其他一些方法用到)。这个类在jdk源码中多个类中用到,主要作用是任意内存地址位置处读写数据,外加一下CAS操作。它的大部分操作都是绕过JVM通过JNI完成的,因此它所分配的内存需要手动free,所以是非常危险的。但是Unsafe中很多(但不是所有)方法都很有用,且有些情况下,除了使用JNI,...原创 2018-07-31 22:27:02 · 710 阅读 · 1 评论 -
多线程(二)synchronized关键字
大家知道被synchronize关键字修饰会使线程进行同步。先看下没有用同步时会发生什么事情:class Foo { private int x = 100; public int getX() { return x; } public int fix(int y) { x = x - y; ret...原创 2018-07-31 18:44:56 · 194 阅读 · 0 评论 -
对象类Object
所有的对象都继承自Object类,它没有成员变量,只有成员方法,而且很多都是native的。public class Object { private static native void registerNatives(); //对native方法进行注册,在类加载时就注册 static { registerNatives(); }1、 /...原创 2018-07-27 17:23:04 · 346 阅读 · 0 评论 -
多线程(八)AbstractOwnableSynchronizer 和 AbstractQueuedSynchronizer
1、AbstractOwnableSynchronizer,设置 和 获取独占锁的拥有者线程。可以由线程以独占方式拥有的同步器。此类为创建锁和相关同步器(伴随着所有权的概念)提供了基础。AbstractOwnableSynchronizer 类本身不管理或使用此信息。但是,子类和工具可以使用适当维护的值帮助控制和监视访问以及提供诊断。public abstract class Abstr...原创 2018-08-03 18:44:53 · 3128 阅读 · 1 评论 -
string(一)成员变量和构造函数
首先你要有spring.java的源码。耐心读完收获很大。1、看class头public final class String implements java.io.Serializable, Comparable<String>, CharSequencefinal,从安全角度来说,通过final修饰后的String类是不能被其他类继承的,在最大程度上的保护了该...原创 2018-07-20 16:25:57 · 1371 阅读 · 0 评论 -
多线程(一)Runnable 和 Thread
一个程序只有一个进程,而一个进程可以包含多个线程,所以进程只能是并发,而线程可以并行。 进程是操作系统中资源分配的基本单位,同一进程的线程间可以共享所属进程的资源,在运行期间,线程才是操作系统的调度和分派的基本单位。同时,操作系统在创建、撤销及切换线程的时候,开销会比进程小。线程在状态转换过程中,可以调用Java API提供的某些方法来改变线程运行的状态。如下图。 下面来介绍一下影响线...原创 2018-07-25 14:18:58 · 381 阅读 · 0 评论 -
StringBuffer 和 StringBuilder
在实际的项目开发过程中,可能我们更多时候是在操作可变的字符串,例如,动态的拼接SQL语句。之所以叫StringBuilder和StringBuffer为可变字符串是因为:(1)提供了大量改变原字符串的操作,如append()方法。而改变是在原来字符串的基础上修改的,并不像String中的一些方法,通过new String()来返回一个新的字符串。(2)字符串会自动扩容,不需要人为的进行...原创 2018-07-25 00:22:52 · 235 阅读 · 0 评论 -
多线程(九)线程池
如何理解线程池的工作机制和原理?(1)线程池是用来干嘛的,用它有什么好处,怎么能更好的去用线程池?线程池是用来干嘛的? 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。 那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务? 使用线程池的好处 ...转载 2018-09-02 16:27:12 · 172 阅读 · 0 评论