12 2021 档案
摘要:算法分析 算法分析简介 有关算法时间耗费分析,称之为算法的时间复杂度分析,有关算法的空间耗费分析,称之为算法的空间复杂度分析。 时间复杂度分析 事后分析估算方法: 比较容易想到的方法就是我们把算法执行若干次,然后拿个计时器在旁边计时,这种事后统计的方法看上去的确不错,并且也并非要我们真的拿个计算器在
阅读全文
摘要:数据结构和算法概述 数据结构简介 数据结构是一门研究非数值计算的程序设计问题中的操作对象,以及他们之间的关系和操作等相关问题的学科。 简而言之数据结构就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据. 数据结构分类 传统上,我们可以把数据结构分为逻辑结构和物理结构两大类。 逻辑结构分类
阅读全文
摘要:Fork/Join 框架和异步回调 Fork/Join 框架 Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join 框架要完成两件事情: Fork:把一个复杂任务进行分拆,大事化小 Join:把分拆任务的结果进行合
阅读全文
摘要:线程池 简介 线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。 线程池的优
阅读全文
摘要:阻塞队列 BlockingQueue阻塞队列 阻塞队列,顾名思义,首先它是一个队列, 通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 当队列是空的,从队列中获取元素的操作将会被阻塞 当队列是满的,从队列中添加元素的操作将会被阻塞 试图从空的队列中获取元素的线程将会被阻塞,直到其他
阅读全文
摘要:读写锁和锁降级 读写锁 读写锁:ReentrantReadWriteLock 读操作共享资源,写操作独占资源 防止在写操作的过程中被其他线程读取(读取不完整) 缺点:可能造成读的饥饿问题,一直读,没有写 //资源类 class MyCache{ //创建资源集合 private volatile M
阅读全文
摘要:三大辅助类 少计数 CountDownLatch CountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法之后的语句。 CountDownLatch 主要有两个方法,当一个或
阅读全文
摘要:Callable 和 Future 接口 Callable接口 Callable 接口实现多线程的特点如下(重点) 为了实现 Runnable,需要实现不返回任何内容的 run()方法,而对于Callable,需要实现在完成时返回结果的 call()方法。简而言之Runnable接口没有返回值,Ca
阅读全文
摘要:多线程锁 synchronized锁的八个问题 案例 class Phone { public static synchronized void sendSMS() throws Exception { //停留4秒 TimeUnit.SECONDS.sleep(4); System.out.pri
阅读全文
摘要:集合的线程安全 List集合线程安全问题 /* list集合线程安全 */ public class ThreadDemo4 { public static void main(String[] args) { //创建ArrayList集合 // List<String> list = new A
阅读全文
摘要:线程间通信和定制化通信 线程间通信概述 线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。 模拟场景 两个线程,一个线程对当前数值加 1,另一个线程对当前数值减 1,要求用线程间通信 synchronized 方案 //创建资源类,定义属性和操作方法 class Sha
阅读全文
摘要:Synchronized和Lock Synchronized synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种: 修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 修饰一个方法,被修饰的方法
阅读全文