01 2019 档案

摘要:一.原子操作 syn基于阻塞的锁的机制,1、被阻塞的线程优先级很高,2、拿到锁的线程一直不释放锁怎么办?3、大量的竞争,消耗cpu,同时带来死锁或者其他安全。 CAS的原理 CAS(Compare And Swap),指令级别保证这是一个原子操作 三个运算符: 一个内存地址V,一个期望的值A,一个新 阅读全文
posted @ 2019-01-22 23:31 梦里南柯 阅读(192) 评论(0) 推荐(0)
摘要:作用:控制同时访问某个特定资源的线程数量,用在流量控制。 阅读全文
posted @ 2019-01-22 21:11 梦里南柯 阅读(146) 评论(0) 推荐(0)
摘要:Spring的AOP其就是通过动态代理的机制实现的,所以理解动态代理尤其重要。 动态代理比静态代理的好处: 1.一个动态代理类可以实现多个业务接口。静态代理的一个代理类只能对一个业务接口的实现类进行包装,如果有多个业务接口的话就要定义很多实现类和代理类才行。 2.提供统一的方法前后处理。如果代理类对 阅读全文
posted @ 2019-01-17 18:03 梦里南柯 阅读(316) 评论(0) 推荐(0)
摘要:一.SpringMVC的工作原理 SpringMVC流程 1、 用户发送请求至前端控制器DispatcherServlet。 2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。 3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处 阅读全文
posted @ 2019-01-17 16:43 梦里南柯 阅读(223) 评论(0) 推荐(0)
摘要:一.线程状态的切换 5种 二.深入理解run()和start() run方法就是普通对象的普通方法,只有调用了start()后,Java才会将线程对象和操作系统中实际的线程进行映射,再来执行run方法 运行结果: 放开start(),注释run()之后: 三.ForkJoin 框架 思想:分而治之 阅读全文
posted @ 2019-01-15 23:34 梦里南柯 阅读(115) 评论(0) 推荐(0)
摘要:一.NIO和BIO的对比 BIO通信模型 2.配置 BIO tomcat server.xml NIO 3.NIO 阅读全文
posted @ 2019-01-14 00:01 梦里南柯 阅读(195) 评论(0) 推荐(0)
摘要:FutureTask是一种可以取消的异步的计算任务。它的计算是通过Callable实现的,多用于耗时的计算。 一.FutureTask的三种状态 二.get()和cancel()执行示意 三.使用 一般FutureTask多用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。 3.1 Fut 阅读全文
posted @ 2019-01-11 11:49 梦里南柯 阅读(358) 评论(0) 推荐(0)
摘要:一.线程池的主要处理流程 ThreadPoolExecutor执行execute方法分下面4种情况。 1)如果当前运行的线程少于corePoolSize,则创建新线程来执行任务(注意,执行这一步需要获取全局锁)。 2)如果运行的线程等于或多于corePoolSize,则将任务加入BlockingQu 阅读全文
posted @ 2019-01-11 11:34 梦里南柯 阅读(189) 评论(0) 推荐(0)
摘要:一.等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作,像加强版的join。(t.join()是等待t线程完成) 例: (1)开启多个线程分块下载一个大文件,每个线程只下载固定的一截,最后由另外一个线程来拼接所有的分段;解析一个Excel 阅读全文
posted @ 2019-01-10 12:38 梦里南柯 阅读(252) 评论(0) 推荐(0)
摘要:一.线程不安全的HashMap 多线程环境下,使用HashMap进行put操作会引起死循环(jdk1.7 Entry链表形成环形数据结构),导致CPU利用率接近100%。 结构:数组 table[]+链表entry<k,v>put 对key做hash默认初始化数组长度 16加载因子 0.75扩容 大 阅读全文
posted @ 2019-01-10 09:58 梦里南柯 阅读(619) 评论(0) 推荐(0)
摘要:四.Redis简介 redis为什么这么快 4.1 Redis数据类型 String hash 字典,适用于存储对象 list 安照String元素插入顺序排序,最新插入的最先显示。如热点数据 set String元素组成的无序集合,不允许重复。如微博共同关注等功能 zset 从小到大的排序,分数一 阅读全文
posted @ 2019-01-09 23:48 梦里南柯 阅读(148) 评论(0) 推荐(0)
摘要:一.Lock接口的几个功能: 显示的获取和释放锁 尝试非阻塞的获取锁 能被中断的获取锁 超时获取锁 使用方式: Lock的API 二.AQS 定义:用来构建锁或者其他同步组件的基础框架,它使用了一个int成员变量表示同步状态,通过内置的FIFO队列来完成资源获取线程的排队工作。是实现锁的关键。 同步 阅读全文
posted @ 2019-01-09 12:32 梦里南柯 阅读(197) 评论(0) 推荐(0)
摘要:ThreadLocal,即线程变量,是一个以ThreadLocal对象为键、任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的一个值。目的就是为了让线程能够有自己的变量 可以通过set(T)方法来设置一个值,在当前线程下再通 阅读全文
posted @ 2019-01-09 11:03 梦里南柯 阅读(248) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-01-08 22:25 梦里南柯 阅读(1) 评论(0) 推荐(0)
摘要:t.join()方法只会使主线程进入等待池并等待t线程执行完毕后才会被唤醒。并不影响同一时刻处在运行状态的其他线程。它能够使得t.join()中的t优先执行,当t执行完后才会执行其他线程。能够使得线程之间的并行执行变成串行执行。 在很多情况下,主线程生成并起动了子线程,如果子线程里要进行大量的耗时的 阅读全文
posted @ 2019-01-07 15:12 梦里南柯 阅读(187) 评论(0) 推荐(0)
摘要:一.概述 一个线程修改了一个对象的值,另一个线程感知到变化从而做出相应的操作。前者是生产者,后者是消费者。 等待/通知机制,是指一个线程A调用了对象O的wait()方法进入等待状态,而另一个线程B调用了对象O的notify()或者notifyAll()方法,线程A收到通知后从对象O的wait()方法 阅读全文
posted @ 2019-01-07 15:00 梦里南柯 阅读(358) 评论(0) 推荐(0)
摘要:一.线程间的通信 volatile和syncronized关键字 volatile 修饰变量,告知任何对该变量的访问必须从共享内存获取,对它的改变必须同步刷新至共享内存,由此保证可见性。 syncronized修饰方法和同步块 syncronized的实现细节 写一个java类: 在class文件的 阅读全文
posted @ 2019-01-07 11:58 梦里南柯 阅读(178) 评论(0) 推荐(0)
摘要:一.JVM内存管理 1.1JVM运行时数据区 1.1.1程序计数器:记录当前线程正在执行的字节码指定的地址(行号) 为什么需要它:程序容易被打断 1.1.2虚拟机栈:存储当前线程运行方法时所需要的数据、指令、返回地址 1.1.3本地方法栈:和虚拟机栈类似,存储的是native方法 1.1.4方法区: 阅读全文
posted @ 2019-01-06 15:04 梦里南柯 阅读(167) 评论(0) 推荐(0)