`
文章列表

内部类

在一个类A内部定义类B, B是非static类,那么B叫做非静态内部类,A叫做B的外部类。   在一个类A内部定义类C, C是static类,那么C叫做静态内部类,A叫做C的外部类。   非静态内部类B:   1在外部类A非静态方法中可以直接实例化内部类B.   2.内部类B可以直接访问外部类A的属性(成员变量)或方法。       3.其它类D引用内部类B的语法 A.B b=A实例.new B(); //前提是B对于D是可见的。   4. 内部类B内部默认持有外部类实例的引用: 外部类A.this 。 一个外部类A实例 new出来的多个B实例,那么所有B实例共享这个 ...

Collection

Collection 定义了可装载元素的容器。   List,Set,Queue是它的子类。    JAVA API 方法:  boolean add(E e)           确保此 collection 包含指定的元素(可选操作)。  boolean addAll(Collection<? extends E> c)            ...

Queue

Queue   可装载元素的容器,提供了添加元素,移出队列头元素,检查队列头部是否有元素等方法。       抛出异常 返回特殊值 插入 add(e) offer(e) 移除 remove() poll() 检查 element() peek()     Queue 子类:      Queue  方法:   boolean add(E e)           将指定的元素插入此队列(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用的空间,则抛出 IllegalStateException。 ...

List

List     装载元素的有序容器,List内的元素可以重复,可以通过位置定位到每一个元素或将某一元素插入到固定位置。        List 子类: List 的选择:   单线程下:         任意方式读取遍历,但只从队列尾部添加,从尾部开始删除,就用ArrayList, (添加到中间或从中间删 除需要重建数组,添加的元素量过大时,不断超过容量,也需要重建数组,最指定容量大小)。                任意位置添加删除,遍历时仅使用迭代器,就用LinkedList。    多线程下 (如果允许,最好使用:ConcurrentLinkedQue ...

Set

Set   内部元素  无序的,不可重复元素的 collection  API:    boolean add(E e)           如果 set 中尚未存在指定的元素,则添加此元素(可选操作)。  boolean addAll(Collection<? extends E> c)           如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中(可选操作)。  void clear()           移除此 set 中的所有元素(可选操作)。  boolean contain ...

Map

Map  表示键与值的一对一关系,键不允许重复。通过键可以快速找到值。 API: 方法摘要  void clear()           从此映射中移除所有映射关系(可选操作)。  boolean containsKey(Object key)           如果此映射包含指定键的映射关系,则返回 true。  boolean containsValue(Object value)           如果此映射将一个或多个键映射到指定值,则返回 true。  Set<Map.Entry<K,V>> entrySet ...

类的定义

类的定义:    [public|default]  [abstract|final] class 类名 [extends 父类] [implements 接口1[,接口2[,接口n]]]{       [{初始代码块}]       [static{静态初始化代码块}]      //零个或多个构建器      [public|protected|private|default] 类名  (参数类型 参数值[,参数类型 参数值]){            [this([参数值])|super([参数值])]            方法体       }      //零个 ...

数据类型

基本数据类型: (明文书写的整型数据,默认类型为int) byte:1个字节(8位),表示数据范围:-128(负的2的7次方)至127(2的7次方减1), 最高位 1表示负数 0表示正数。      默认值为0。包装器类型:Byte。 书写格式: byte x = 12;(该值 ...
 个人学习笔记,如有错误欢迎指正。。   Java ClassLoader用于加载Class文件生成Class对象。    jvm 默认启动的ClassLoader:  1.Bootstrap 引导类加载器 java_home/jre/lib下的固定的几个jar包,如rt.jar 等   2.sun.misc.Launcher$ExtClassLoader 扩展类加载器 加载 java_home/jre/lib/ext/下(java.ext.dirs参数指定目录下)的所有jar   3.sun.misc.Launcher$AppClassLoader 系统类加载器 加载Clas ...

CyclicBarrie

个人学习笔记,如有错误欢迎指正。。     CyclicBarrier 类用于阻塞一个或多个线程,等待其它线程完成任务,直至所有线程都完成各自的任务,才会解除阻塞继续执行。     构建器 CyclicBarrier   (int n,Runnable runnable)   await()方法被调用时,计数器N减一,如果计数据N>0,则当前线程阻塞,如果计数器N==0时,则 Runnable 被调用, Runnable 执行完成后,所有因为await()方法阻塞的线程被唤醒。N被再次重置为初始值,这个  CyclicBarrier  可以被再次复用。    示例:计 ...

Exchanger

个人学习笔记,如有错误欢迎指正。。   Exchanger 用于两个线程之间进行数据或对象交换(通信),是线程安全的。    方法: public V exchange(V x)     A线程调用该方法时阻塞,直至另外一个线程B调用同一个Exchanger实例 的exchange方法, B线程的exchange方法获取A线程的调用参数,并唤醒A线程,再返回A线程的调用参数,继续执行 A线程被唤醒并exchange方法返回B线程的调用参数,再继续执行。   这就完成两个线程间数据的交换,并是线程安全的。    两个以上线程之间使用 exchange交换,不能确定哪 ...
个人学习笔记,如有错误欢迎指正。。   信号量Semaphore ,一般用于限制对某些资源固定数量的访问。   Semaphore维护了N个的许可,某线程通过acquire()获取一个许可或acquire(int permits) 获取多许可,如果许可数量N大于线程要求的许可数,线程得到许可并可以继续执行。 否则线程阻塞,等待某线程释放许可。 某线程释放许可,许可数量增加并唤醒被阻塞的线程,阻塞线程唤醒后再试着获取许可,获取成功则继续执行否则再次阻塞。   Semaphore内部使用AbstractQueuedSynchronizer   方法:  void a ...
个人学习笔记,如有错误欢迎指正。。   AtomicReference 提供了原子的方式更新对象引用。用于多线程之间。   对象的引用赋值本身就是原子的。 如:共享变量Object o ;  线程A 执行 :o = "x";//原子的线程安全  线程B 执 ...

线程池

  个人学习笔记,如有错误欢迎指正。。   一 线程池的介绍       如果需要线程来执行的任务,可以使用 new Thread 来创建线程,Thread.start()方法执行线程,线程执行完之后,不可再利用。还有其它任务需要线程来执行,需要重复上述步骤。         这样就形成,一个任务创建一条线程来执行,对于大量任务来说,频繁创建和销毁线程都需要耗费系统资源,这种情况可以使用线程池来提升性能减少开销。          线程池中的线程创建完成后,可以重复的执行不同的任务(Runnable或Callable),实现了线程的重复利用,减少了创线程的数量。       ...

CountDownLatch

CountDownLatch 用于阻塞一条或多条线程,直至其它线程把工作完成。  构那建器:   CountDownLatch(int count);count为计数器   方法:await()           调用await方法的线程在计数器=0前一直阻塞,除非线程被中断。         countDown()           将计数器count-1,如果计数到达零,则唤醒因为调用await方法而阻塞的所有的线程。           调用完countDown()方法后线程会继续执行。   一般用于一个线程或多个线程 ,等待其它线程完成count个工作,才继续 ...
Global site tag (gtag.js) - Google Analytics