• Reactor


    代理也分静态代理/jdk动态代理和cglib代理(字节码技术)
    ------------------------------------
    被代理的类不一定位于本机类,动态代理语法提供了一种抽象方式,
    被代理的类也可以位于远程主机上,这也是RPC框架实现原理的一部分

    1,给调用者使用的代理类。在java中,我们发现动态代理提供的抽象天然契合面向接口编程,
    因此它也有可能是接口。
    2,一个统一的处理函数,收集不同函数转发过来的请求,可自定义处理逻辑集中处理。java中它可能会成为一个较独立的部分,
    因此也可能是类。


    第一个部分,给调用者使用的代理类。在java动态代理机制中,这个角色只能是接口
    第二个角色,统一的处理函数。在java中它的确是类,通过实现InvocationHandler接口定义


    代理本地对象,因此还需要一个被代理对象的类
    ---------------------------------------------------------------------------
    动态装饰器


    将分散的对对象不同方法的调用转发到一个同一的处理函数中来。



    Reactor模式
    Reactor 1:创建一个Selector 和一个ServerSocketChannel
    将监听端口绑定到Channel中,设置channel为非阻塞,
    在Selector上注册自己感兴趣的事件,读写或者连接事件。
    Reactor(int port) throws IOException {
    selector = Selector.open();
    serverSocket = ServerSocketChannel.open();
    serverSocket.socket().bind(new InetSocketAddress(port));
    serverSocket.configureBlocking(false);
    SelectionKey sk = serverSocket.register(selector, SelectionKey.OP_ACCEPT);
    sk.attach(new Acceptor());
    }
    Reactor 2: Dispatch Loop
    selector.select()是阻塞的,一旦又请求到来时,就会从selector中获取到对应的SelectionKey ,
    然后将其下发给后续处理程序(工作线程)进行处理

    //无限循环等待网络请求的到来
    //其中selector.select();会阻塞直到有绑定到selector的请求类型对应的请求到来,
    一旦收到事件,处理分发到对应的handler,并将这个事件移除


    Reactor 3: Acceptor
    Acceptor也是一个线程,在其run方法中,通过判断serverSocket.accept()方法来获取SocketChannel,
    只要SocketChannel 不为空,则创建一个handler进行相应处理

    Reactor 4: Handler setup
    一个handler就是一个线程,其中的SocketChannel 被设置成非阻塞。
    默认在Selector上注册了读事件并绑定到SocketChannel 上。

    Reactor 5: Request handling
    针对不同的请求事件进行处理

    Worker Thread Pools for Reactor
    考虑到工作线程的复用,将工作线程设计为线程池

    在handler中使用线程池来处理任务


    ------------------------------------------------------
    类加载机制:加载类文件读取文件内容(类的解析)如果有超类也会被加载,执行静态的main方法
    三个类加载器:引导类加载器rt.jar,系统类加载器(应用类加载器),扩展类加载器jre/lib/ext


    ---------------------------
    OutputStreamWriter 字符流转字节流,字符使用指定编码写成字节,


  • 相关阅读:
    剑指offer——斐波那契数列
    剑指offer——用两个栈实现队列
    剑指offer——二维数组中的查找
    LeetCode第九题—— Palindrome Number(判断回文数)
    java 面试题汇总
    idea设置方法注释
    解决java.lang.SecurityException: Invalid signature file digest for Manifest main attributes
    Timer和TimerTask详解
    java8函数式接口(Functional Interface)
    Python执行选择性粘贴
  • 原文地址:https://www.cnblogs.com/iamgoodman/p/10247082.html
Copyright © 2020-2023  润新知