Java

Java 泛型约束

类型约束:importjava.util.List;importjava.util.ArrayList;importjava.util.LinkedList;/***CreatedbyAdministratoron2016/12/300030.*/publicclassListGenericFoo<Textend...
代码星球·2020-08-09

Java 单例模式

代码:双重检查,懒汉模式publicclassSingleton{privatestaticSingletonINSTANCE;privateSingleton(){}publicstaticSingletongetInstance(){if(INSTANCE==null){synchronized(Singleton...
代码星球·2020-08-09

Java中的Atomic包使用指南

java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类java的并发包中底层大量的使用这个类的功能,了解这个类有助于了解java并发包,理解为什么并发包中的类的并发性能为什么会比使用synchronized好在Atomic包里一共有12个类,四种原子更新方式,分别是原子更新基本类型...

Java多线程 LockSupport

在AQS里面进行阻塞线程,解除阻塞线程就用的LockSupport。JDK1.8源码:packagejava.util.concurrent.locks;importsun.misc.Unsafe;publicclassLockSupport{privateLockSupport(){}//Cannotbeinstan...
代码星球·2020-08-09

Java并发控制:ReentrantLock Condition使用详解

生产者-消费者(producer-consumer)问题,也称作有界缓冲区(bounded-buffer)问题,两个进程共享一个公共的固定大小的缓冲区。其中一个是生产者,用于将消息放入缓冲区;另外一个是消费者,用于从缓冲区中取出消息。问题出现在当缓冲区已经满了,而此时生产者还想向其中放入一个新的数据项的情形,其解决方法...

Java接口与实例化

看代码看到publicRunnabler=newRunnable(){@Overridepublicvoidrun(){...}}接口不能new,不过可以生成一个匿名类,省略了写一个具体类实现接口的开销。publicclassMain{publicstaticvoidmain(String[]args){Stringa...
代码星球·2020-08-09

Java 线程池submit和execute

submit方法:publicabstractclassAbstractExecutorServiceimplementsExecutorService{protected<T>RunnableFuture<T>newTaskFor(Runnablerunnable,Tvalue){return...
代码星球·2020-08-09

Java 线程池Future和FutureTask

Future表示一个任务的周期,并提供了相应的方法来判断是否已经完成或者取消,以及获取任务的结果和取消任务。Future接口源码:publicinterfaceFuture<V>{booleancancel(booleanmayInterruptIfRunning);booleanisCancelled()...

Java 多线程Thread和Runnable

Thread:classMyThreadextendsThread{privateintticketsCont=5;//一共有5张火车票privateStringname;//窗口,也即是线程的名字publicMyThread(Stringname){this.name=name;}@Overridepublicvoi...
代码星球·2020-08-09

Java 找到数组中两个元素相加等于指定数的所有组合

 思路1:可以用hash表来存储数组中的元素,这样我们取得一个数后,去判断sum-val在不在数组中,如果在数组中,则找到了一对二元组,它们的和为sum,该算法的缺点就是需要用到一个hash表,增加了空间复杂度。思路2:同样是基于查找,我们可以先将数组排序,然后依次取一个数后,在数组中用二分查找,查找sum-...

Java多线程 wait, notify 和 notifyAll

Java的Object类publicclassObject{publicfinalnativevoidnotify();publicfinalnativevoidnotifyAll();publicfinalnativevoidwait(longtimeout)throwsInterruptedException;}调...

Java 线程池的介绍以及工作原理

在什么情况下使用线程池?1.单个任务处理的时间比较短2.将需处理的任务的数量大使用线程池的好处:1.降低资源消耗:      通过重复利用已创建的线程降低线程创建和销毁造成的消耗。2.提高响应速度:      当任务到达时,任务可以不需要等到线程创建就能立即执行。3.提高线程的可管理性:   线程是稀缺资源,如果无限制...

Java 类加载机制

类的加载:类的初始化:类什么时候才被初始化:1)创建类的实例,也就是new一个对象2)访问某个类或接口的静态变量,或者对该静态变量赋值3)调用类的静态方法4)反射(Class.forName("com.lyj.load"))5)初始化一个类的子类(会首先初始化子类的父类)6)JVM启动时标明的启动类,即文件名和类名相同...
代码星球·2020-08-09

Java GC垃圾回收

Java的内存分配和回收也主要在Java的堆上进行的,Java的堆中存储了大量的对象实例,所以Java的堆也叫GC堆。Java在垃圾收集的过程中,主要用到了分代收集算法,具体有复制、标记清除、标记压缩三种实现算法1.标记-清除算法标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想。标记清除算法分为&ldquo...
代码星球·2020-08-09

Java native关键字

在String类中publicnativeStringintern();native关键字是干嘛的?Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等),为此Java使用native方法来扩展Java程序的功能。 可以将nativ...
代码星球·2020-08-09