多线程
qq_33296156
这个作者很懒,什么都没留下…
展开
-
01钩子线程Hook
JVM进程的退出是由于JVM进程种没有活跃的非守护线程,或是收到了系统中断信号,向JVM程序注入一个Hook线程,在JVM进程退出的时候,Hook线程会启动执行,通过Runtime可以为JVM注入多个Hook线程:结果:The program will is stopping.The hook thread 1 is running.The hook thread 2 is r...原创 2018-09-04 17:39:43 · 426 阅读 · 0 评论 -
08互斥锁,读写锁和条件
java.util.concurrent.locks包提供了锁和等待条件的接口和类, 可用于替代JDK1.5之前的同步(synchronized)和监视器机制(主要是Object类的wait(), notify(), notifyAll()方法). 互斥锁--Lock接口及其实现类ReentrantLock所谓互斥锁, 指的是一次最多只能有一个线程持有的锁. 在jdk1.5之前, 我们...转载 2018-09-05 15:04:11 · 102 阅读 · 0 评论 -
07七种单例模式的线程安全,高性能和懒加载
七种实现单例模式的线程中只有第五种:Volatile+Double-Check第六种:Holder第七种:enum只有上面这三种,高效且线程安全同时实现懒加载1.饿汉式:可以保证多线程下的唯一实例,getInstance性能也比较高,无法懒加载2.懒汉式:不能保证多线程下唯一性3.懒汉式+同步方法:能保证唯一和懒加载,但是性能低下4.Double-C...原创 2018-09-05 13:43:06 · 1550 阅读 · 0 评论 -
06Volatile关键字
Cache(三级缓存)的出现是为了解决cpu(贼快)和内存(相比cpu慢的多,但是redis也是基于内存的数据库,一旦程序关闭(也就是redis退出),那么内存中存储的缓存都会消失,而redis在启动时通过aof或rdb将数据重新读取到内存中来,扯远了。。。。。。)之间读写速度严重不统一的问题CPU缓存一致性问题:i++首先,在程序运行期间,将主内存中的数据复制一份存储到CPU Cac...原创 2018-09-05 11:19:14 · 84 阅读 · 0 评论 -
05线程上下文类加载器
在JDK1.2后,可以使用getContextClassLoader()和setContextClassLoader()来获取和设置当前线程的上下文类加载器,如果没有设置,默认与父线程一致。Java 提供了很多服务提供者接口(Service Provider Interface,SPI),允许第三方为这些接口提供实现。常见的 SPI 有 JDBC、JCE、JNDI、JAXP 和 JBI 等。...转载 2018-09-05 10:15:57 · 101 阅读 · 0 评论 -
04JVM类加载器
JVM为我们提供三大内置的类加载器,它们之间严格遵守着父委托的机制自定义类加载器:自定义类加载器都是ClassLoader的直接或间接子类,必须实现finidClass方法 protected Class<?> findClass(String name) throws ClassNotFoundException { throw new Cla...转载 2018-09-05 09:50:20 · 80 阅读 · 0 评论 -
简单理解堆,栈和方法区
JAVA的JVM的内存可分为3个区:堆(heap)、堆栈(stack)和方法区(method) 堆区: 提供所有类实例和数组对象存储区域 jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身 栈区: 每个线程包含一个栈区,栈中只保存基础数据类型的对象和自定义对象的引用(不是对象),对象都存放在堆区中 ...原创 2018-09-05 10:12:47 · 186 阅读 · 0 评论 -
03ClassLoader
ClassLoader的主要职责就是负责加载各种class文件到JVM中,ClassLoader是一个抽象的class,给定一个class的二进制文件名,ClassLoader会尝试加载并且在JVM中生成构成这个类的各个数据结构,并将其分布在JVM的内存中JVM采用懒加载,只要第一次使用的时候才会加载初始化类只有6种情况除外:new 访问静态变量 访问静态方法 对某个类进行反...原创 2018-09-04 21:30:31 · 69 阅读 · 0 评论 -
02线程池
一个完整的线程池需要具备以下要素:任务队列:用于缓存提交的任务 线程数量管理实现:创建线程时初始数量init,线程池地洞扩充到最大时的线程数量max,线程空闲时维护的活跃数量core三者之间的关系是:init<=core<=max 任务拒绝策略 线程工厂:用于个性化定制线程,比如将线程设置为守护线程及设置线程名称等 QueueSize:任务队列中存放的数量 keepeda...原创 2018-09-04 17:58:18 · 66 阅读 · 0 评论 -
09ThreadLocal在上下文中的应用
ThreadLocal存储的内容在当前线程自己的ThreadLocalMap中,当线程销毁,数据自然被释放实现一个简单的线程上下文每个线程若想使用,直接使用get()获取对应的实例,然后调用相应的方法就行,不会影响其他线程调用实例 ...转载 2018-09-06 10:16:18 · 379 阅读 · 0 评论