大型网站系统与java中间件实践-阅读笔记
线程池 ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
1.synchronized
2.volatile
3.Reentrantlock ReentrantReadWriteLock
4.Atomics
5.wait notify notifyAll
6.CountDownLatch
7.CyclicBarrier 循环屏障
示例:
class Solver {
* final int N;
* final float[][] data;
* final CyclicBarrier barrier;
*
* class Worker implements Runnable {
* int myRow;
* Worker(int row) { myRow = row; }
* public void run() {
* while (!done()) {
* processRow(myRow);
*
* try {
* barrier.await();
* } catch (InterruptedException ex) {
* return;
* } catch (BrokenBarrierException ex) {
* return;
* }
* }
* }
* }
*
* public Solver(float[][] matrix) {
* data = matrix;
* N = matrix.length;
* Runnable barrierAction =
* new Runnable() { public void run() { mergeRows(...); }};
* barrier = new CyclicBarrier(N, barrierAction);
*
* List<Thread> threads = new ArrayList<Thread>(N);
* for (int i = 0; i < N; i++) {
* Thread thread = new Thread(new Worker(i));
* threads.add(thread);
* thread.start();
* }
*
* // wait until done
* for (Thread thread : threads)
* thread.join();
* }
* }}
9.Semaphone
10.Exchanger 用于两个线程之间进行数据交换
11 Future FutureTask
12 并发容器 JUC copyOnWrite
13 动态代理
14 反射 (1)获取对象属于哪个类 2)获取类的信息 3)构建对象 4)动态执行方法 Method method = clazz.getDeclaredMethod(“add”,int.class,int.class); method.invoke(this,1,1);
5)动态操作属性 Filed filed = clazz.getDeclaredFiled(“name”); filed.set(this,”test”);
字节码增强 javassist cglib asm bcel
15 网络通信 BIO NIO AIO
16 服务框架原型
1) 客户端逻辑 a 获取可用服务地址列表 b 确定要调用服务的目标机器 c 请求信息序列化 d. 发送请求 e 接收结果
2)服务端逻辑 a.启动端口进行监听 b.接收请求并进行反序列化处理 c.定位到具体的service methodName和参数 d.通过反射方式进行执行业务逻辑 e.执行结果序列化为二进制写会给请求发送端
大概流程: 调用发起——》寻址路由——》协议适配/序列化 ——》网络传输——》反序列化/协议解析——》结果返回给调用方
3)服务框架使用方式 a 三个基础属性:interfaceName version group
4) 调用者和提供者进行直连方式进行建立连接,通过引入注册中心进行服务注册与发现,出于效率考虑,调用者会进行本地地址缓存一份,发送变更后,注册中心进行列表最新信息推送,从而更新变化。集群的负责均衡:轮询 随机 权重
上一篇: 小祖宗