Java

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

Java Lock ReentrantLock ReentrantReadWriteLock

 Lock与Synchronized的区别:  1)Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现;  2)synchronized在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock在发生异常时,如果没有主动通过u...

Java foreach

foreach循环也叫增强型的for循环,或者叫foreach循环。foreach循环是JDK5.0的新特性(其他新特性比如泛型、自动装箱等)。importjava.util.Arrays;publicclassMain{publicstaticvoidmain(String[]args){intarr[]=newin...
代码星球·2020-08-09

Java CopyOnWriteArrayList

Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略。从JDK1.5开始Java并发包里提供了两个使用CopyOnWrite机制实现的并发容器,它们是C...
代码星球·2020-08-09