Java基础--面向对象 - 问尤龙の时光 (wenyoulong.com) Java基础--基础知识 - 问尤龙の时光 (wenyoulong.com) Java基础--集合框架 - 问尤龙の时光 (wenyoulong.com) Java基础--多线程 - 问尤龙の时光 (wenyoulong.com) Java基础--常见的几种锁 - 问尤龙の时光 (wenyoulong.com) Java基础--内部类和lambda表达式 - 问尤龙の时光 (wenyoulong.com) 有更新! Java知识总结 Java基础
一、嵌套类 1.1 内部类 1.1.1 概念 内部类是定义在一个类中的类,内部类有以下特点 内部类的方法可以访问该类定义所在的作用域中的数据,包括私有数据 内部类可以对同一个包中的其他类隐藏起来 示例,下述代码中创建了一个类,里面有一个内部类,在内部类定义了一个定时器,定时输出当前时间,在TimerPrint内部类中,我们可以访问到TalkingClock的数据(包括静态变量、静态方法、普通变量、普通方法) class TalkingClock{ private int interval; private boolean beep; public static String NAME = "龙"; public TalkingClock(int interval, boolean beep){ this.interval = interval; this.beep = beep; } public void start(){ ActionListener actionListener = new TimerPrint(); Timer t = new Timer(interval,ac.... 有更新! Java基础--内部类和lambda表达式 Java基础
一、悲观锁和乐观锁 多线程访问共享资源时,会对共享资源有增删改查的操作; 悲观锁在线程操作共享资源期间,枷锁成功就会禁止其他线程操作共享资源; 乐观锁不限制各个线程对共享资源的操作,但是当线程要更新共享资源时,会先判断该资源有没有被其他线程修改,如果共享资源没有被其他线程更新,则更新共享资源,如果被其他资源更新,则根据自己的需求另作处理; 悲观锁适合写操作较多的场景,加锁可以保证数据正确性,java的synchronized和Lock都是悲观锁实现 乐观锁适合读操作较多的场景,不加锁可以提升性能,java的原子操作类就是基于乐观锁实现 二、自旋锁和非自旋锁 2.1 自旋锁 多线程获取共享资源时,若资源被其他线程占用,该线程就会等待获取锁资源,但是线程不会放弃已经拿到的CPU时间片,通过自旋等待共享资源被释放 2.2 非自旋锁 非自旋锁再等待其他线程施放锁的时候,会让出CPU时间片,使线程进入休眠,所释放后,才会重新获取CPU时间片 三、无锁、偏向锁、轻量级锁和重量级锁 偏向锁通过对比Mark Word处理加锁问题,避免执行CAS操作,轻量级锁通过CAS操作和自旋来解决加锁问题,避免线程.... 有更新! Java基础--常见的几种锁 Java基础
一、线程的状态 创建(NEW) 创建但是未调用start方法 可运行(RUNNABLE) 可能正在运行,也可能正在等待CPU时间片 阻塞(BLOCKED) 等待获取一个锁 等待(WAITING) 处于这种状态的线程不会被分配CPU执行时间,它们要等待被显式地唤醒 超时等待(TIMED_WAITING) 处于这种状态的线程不会被分配CPU执行时间,无须无限期等待被其他线程显示地唤醒,在达到一定时间后它们会自动唤醒 终止(TERMINATED) 线程运行结束 1.1 新建(NEW) 创建后尚未启动。 1.2 可运行(RUNNABLE) 可能正在运行,也可能正在等待 CPU 时间片。 包含了操作系统线程状态中的 Running 和 Ready。 1.3 阻塞(BLOCKED) 等待获取一个排它锁,如果其他线程释放了锁就会结束此状态 1.4 无限期等待(WAITING) 等待其它线程显式地唤醒,否则不会被分配 CPU 时间片 进入等待方法退出等待方法 Object.wait()Object.nofity或Object.nofityAll Thread.join()被调用的线程执行完毕 Lock.... 有更新! Java基础--多线程 Java基础
一、概述 集合框架主要包括Map和Collection,Collecton用于存储对象,而Map则通过键值对(两个对象)存储对象 二、Collection 2.1 Set TreeSet 基于红黑树实现,支持有序操作 HashSet 基于哈希表实现,查询速度快,但是数据无序 LinkedHashSet 查询效率与hashset一致,但是内部基于双向链表实现 2.2 List ArrayList 基于数组实现,查询快,增删慢 Vector 实现与ArrayList一致,但是线程安全 LinkedList 基于双向链表实现,查询慢,增删快。还可用于栈、队列、双向队列 2.3 Queue LinkedList 实现双向队列 PriorotyQueue 基于堆结构实现,可以用他来实现优先队列 三、Map TreeMap 基于红黑树实现 HashMap 基于哈希表实现 HashTable 与HashMap类似,但是线程安全 LinkedHashMap 使用双向链表来维护元素的顺序,顺序为插入顺序或者最近最少使用(LRU)顺序 参考Java中的Map - 问尤龙の时光 (wenyoulong.co.... 有更新! Java基础--集合框架 Java基础
一、数据类型 1.1 基础数据类型 基础类型大小(字节)包装类型 boolean1Boolean byte1Byte char2Character short2Short int4Integer float4Float long8Long double8Double 基本类型与包装类型之间的赋值,通过自动装箱和自动拆箱完成 1.2 缓存池 Byte、Character、Integer、Long、Short包装类型中存在数据缓存,调用吧valueOf方法或者自动装箱时,会先去缓存中查询该数据是否存在,存在则返回缓存数据 以Integer为例,Integer中有一个内部类IntegerCache,里面设置了缓存的数据范围是[-128,127],建立了一个cache数组,并在静态代码块中初始化了该数组 private static class IntegerCache { static final int low = -128; static final int high; static final Integer cache[]; static { // high value may be.... 有更新! Java基础--基础知识 Java基础