文章分类 -  java

摘要:java 工具包 Mertrics 一. 概述 对业务代码的各个指标进行监控 Metrics能够很好的跟Ganlia、Graphite结合 core包主要提供如下核心功能: Metrics Registries类似一个metrics容器,维护一个Map,可以是一个服务一个实例。 支持五种metric 阅读全文
posted @ 2016-09-19 16:32 zhangshihai1232 阅读(404) 评论(0) 推荐(0)
摘要:一. ScheduleExecutorService配置 说明 注意问题: 我们需要捕获最上层的异常,防止出现异常中止执行,导致周期性的任务不再执行。 如果执行的任务大于我们指定的执行间隔,比如scheduleAtFixedRate方法;当执行任务的时间大于我们指定的间隔时间时,等待任务执行完毕,再 阅读全文
posted @ 2016-09-19 14:48 zhangshihai1232 阅读(1790) 评论(0) 推荐(0)
摘要:一.BlockingQueue ArrayBlockingQueue和LinkedBlockingQueue的区别: 1. 队列中锁的实现不同 ArrayBlockingQueue实现的队列中的锁是没有分离的,即生产和消费用的是同一个锁; LinkedBlockingQueue实现的队列中的锁是分离 阅读全文
posted @ 2016-09-14 19:34 zhangshihai1232 阅读(217) 评论(0) 推荐(0)
摘要:LockSupport.park()实现分析 一.成员及方法 可以看出parkBlocker是unsafe的成员 二. park与unpark park 传入的Object对象,用setBlocker创建为一个blocker putObject方法如下: 把线程作为对象传入了Unsafe,unsaf 阅读全文
posted @ 2016-09-14 17:51 zhangshihai1232 阅读(111) 评论(0) 推荐(0)
摘要:一.线程的状态 创建(new) 就绪(runnable) 运行(running) 阻塞(blocked) time waiting waiting 消亡(dead) 创建之后不会立即就绪,需要等待资源分配 就绪后不会立即执行,需要等待分配到cpu时间才能执行,进入运行态 运行过程很多情况导致不能继续 阅读全文
posted @ 2016-09-13 22:16 zhangshihai1232 阅读(139) 评论(0) 推荐(0)
摘要:线程安全的Queue BlockingQueue ConcurrentLinkedQueue BlockingQueue ||可能报异常 |返回布尔值 |可能阻塞 |设定等待时间| | | | | | | |入队 |add(e) |offer(e) |put(e) |offer(e, timeout 阅读全文
posted @ 2016-09-12 22:32 zhangshihai1232 阅读(97) 评论(0) 推荐(0)
摘要:一. lock方法 ReentrantLock是一种排他锁 共享锁:就是允许多个线程同时获取一个锁,一个锁可以同时被多个线程拥有。 排它锁:也称作独占锁,一个锁在某一时刻只能被一个线程占有,其它线程必须等待锁被释放之后才可能获取到锁。 定义了两种sync NonfairSync FairSync A 阅读全文
posted @ 2016-09-12 19:24 zhangshihai1232 阅读(93) 评论(0) 推荐(0)
摘要:一. 状态成员 ctl线程数量和线程状态 29位以上管理进程状态,29位以下管理线程数量 五种状态的数字,表示他们的运行的先后顺序。 execute() 首先添加woker,如果添加失败了,任务没有启动 疑问:状态为SHUTDOWN,添加的task为null,workQueue非空,难道可以接受整个 阅读全文
posted @ 2016-09-06 22:21 zhangshihai1232 阅读(238) 评论(0) 推荐(0)
摘要:包含一个unsafe,value用于保存值 例子:accumulateAndGet 阅读全文
posted @ 2016-09-02 22:08 zhangshihai1232 阅读(249) 评论(0) 推荐(0)
摘要:一. CAS 对于例子: 如果a++之前,a的值改变了怎么办 CAS可以实现无锁,这样如果a的值被改变了a++就不会被执行 如果想执行a++操作需要while循环 二. java中的CAS 用的Unsafe类的CAS操作完成的 a++操作 ++a操作,只是返回结果不同 ConcurrentLinke 阅读全文
posted @ 2016-09-02 21:29 zhangshihai1232 阅读(146) 评论(0) 推荐(0)
摘要:unsagfe需要补充线程控制的部分 一. 实例化 方式1:运行时加入bootclasspath 方式2:反射 二. API 三. 线程挂起与恢复 将一个线程进行挂起是通过park方法实现的,调用 park后,线程将一直阻塞直到超时或者中断等条件出现。 unpark可以终止一个挂起的线程,使其恢复正 阅读全文
posted @ 2016-09-02 21:16 zhangshihai1232 阅读(123) 评论(0) 推荐(0)
摘要:一. 内存模型 java每个线程具有独立的缓存 线程会把i读到缓存,然后i+1,然后存到主存,多线程时缓存不一致,但是内存中修改的内容是一份。 解决方式: 1. 总线加锁:只有一个线程能够读主存该值 2. 缓存一致性协议:比如MESI机制,通知线程这个缓存无效,在内存重新读取 二. 并发编程中的三个 阅读全文
posted @ 2016-09-02 20:46 zhangshihai1232 阅读(97) 评论(0) 推荐(0)
摘要:枚举编译 创建一个类:FruitEnum继承自java.lang.Enum 定义的枚举被声明为public static final类型常量 FruitEnum$VALUES数组,保存常量APPLE和ORANGE 创建两个对象,常量引用这个两个对象 两个静态方法: values()拷贝一份数组 va 阅读全文
posted @ 2016-08-09 13:21 zhangshihai1232 阅读(4500) 评论(0) 推荐(0)
摘要:[toc] java enum(枚举)使用详解 + 总结 enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。 下面是我在使用 enum 过程中的一些经验和总结,主要包括如下内容: 原始的接口定义常量 语法(定义) 创建枚举类型要使用 阅读全文
posted @ 2016-08-09 13:20 zhangshihai1232 阅读(94) 评论(0) 推荐(0)
摘要:转自:http://www.iteye.com/magazines/132 Java NIO 580 Scalable IO in Java http://www.open open.com/lib/view/open1428072931615.html http://ifeve.com/overv 阅读全文
posted @ 2016-08-09 13:18 zhangshihai1232 阅读(147) 评论(0) 推荐(0)
摘要:一. 接口的默认方法和静态方法 使用两个新概念扩展了接口的含义:默认方法default和静态方法static。 default 抽象方法需要实现,而默认方法不需要。 实现类可以继承或者覆写default方法。 静态方法不可以覆盖。 应用:在jdk1.8中,很多接口添加了新方法,比如:java.uti 阅读全文
posted @ 2016-08-09 12:59 zhangshihai1232 阅读(238) 评论(0) 推荐(0)
摘要:反射的类 java.lang.Class; java.lang.reflect.Constructor; java.lang.reflect.Field; java.lang.reflect.Method; java.lang.reflect.Modifier; 一. 获取类的方法 方法1:Clas 阅读全文
posted @ 2016-08-09 12:57 zhangshihai1232 阅读(148) 评论(1) 推荐(0)
摘要:Executor Executor只有一个execute方法,可以执行Runnable接口。 ExecutorService ExecutorService继承自Executor AbstractExecutorService AbstractExecutorService抽象类实现Executor 阅读全文
posted @ 2016-08-09 11:56 zhangshihai1232 阅读(109) 评论(0) 推荐(0)
摘要:一. 线程安全性 解决线程安全性方式: 不在线程之间共享状态变量 状态变量修改为不可变 访问状态变量使用同步 无状态的对象是线程安全的; 竞态条件:不正确的执行时序产生不正确的结果; 阅读全文
posted @ 2016-08-03 22:24 zhangshihai1232 阅读(106) 评论(0) 推荐(0)
摘要:一. 序列化 把对象持久化,能够进行网络间的进程间通信。 非transient的进行序列化。 序列化的类需要实现Serializable或者Externalizable接口 序列化是先创建ObjectOutputStream,然后调用outputStream.writeObject(person)把 阅读全文
posted @ 2016-08-02 01:03 zhangshihai1232 阅读(203) 评论(0) 推荐(0)