• 【JAVA】Java实现rpc框架所需方法(类似Dubbo)


    线程池ThreadPoolExecutor

    public ThreadPoolExecutor(int corePoolSize,
    int maximumPoolSize,
    long keepAliveTime,
    TimeUnit unit,
    BlockingQueue workQueue)

    使用给定的初始参数和默认线程工厂创建一个新的ThreadPoolExecutor ,并拒绝执行处理程序。 使用Executors工厂方法之一可能更方便,而不是这种通用构造函数。
    参数
    corePoolSize - 即使空闲时仍保留在池中的线程数,除非设置 allowCoreThreadTimeOut
    maximumPoolSize - 池中允许的最大线程数
    keepAliveTime - 当线程数大于核心时,这是多余的空闲线程在终止之前等待新任务的最大时间。
    unit - keepAliveTime参数的时间单位
    workQueue - 在执行任务之前用于保存任务的队列。 该队列将仅保存execute方法提交的Runnable任务。
    异常
    IllegalArgumentException - 如果以下某项成立:
    corePoolSize < 0
    keepAliveTime < 0
    maximumPoolSize <= 0
    maximumPoolSize < corePoolSize
    NullPointerException - 如果 workQueue为空


    ServerSocket

    在客户/服务器通信模式中,服务器端需要创建监听特定端口的ServerSocket,ServerSocket负责接收客户连接请求。

    public ServerSocket(int port)
    throws IOException
    创建绑定到指定端口的服务器套接字。 端口号0表示端口号是自动分配的,通常是从短暂的端口范围。 这个端口号可以通过调用getLocalPort来检索 。
    输入连接指示(连接请求)的最大队列长度设置为50 。 如果连接指示在队列已满时到达,则连接被拒绝。

    如果应用程序指定了服务器套接字工厂,则调用该工厂的createSocketImpl方法来创建实际的套接字实现。 否则,将创建一个“普通”套接字。

    如果有安全管理器, checkListen方法被称为与port作为其参数,以确保允许该操作。 这可能会导致SecurityException。

    参数
    port - 端口号,或 0使用 0分配的端口号。
    异常
    IOException - 打开插槽时是否发生I / O错误。
    SecurityException - 如果安全管理器存在,并且其 checkListen方法不允许操作。
    IllegalArgumentException - 如果端口参数超出了指定的有效端口值范围(介于0和65535之间),包括0和65535之间。
    另请参见:
    SocketImpl , SocketImplFactory.createSocketImpl() , setSocketFactory(java.net.SocketImplFactory) , SecurityManager.checkListen(int)


    try{}catch{}finaliy{} 变成了 try(){}catch{},

    凡是在try的括号中声明的类都必须实现java.io.Closeable接口,这样try就会自动将声明的流在使用完毕后自动关闭


    ObjectInputStream

    ObjectOutputStream和ObjectInputStream可以分别为与FileOutputStream和FileInputStream一起使用的对象图提供持久性存储的应用程序。 ObjectInputStream用于恢复先前序列化的对象。 其他用途包括使用套接字流在主机之间传递对象,或者在远程通信系统中进行封送和解组参数和参数。

    ObjectInputStream确保从流中创建的图中的所有对象的类型与Java虚拟机中存在的类匹配。 根据需要使用标准机制加载类

    public ObjectInputStream(InputStream in)
    throws IOException
    创建从指定的InputStream读取的ObjectInputStream。 从流中读取序列化流头并进行验证。 该构造函数将阻塞,直到相应的ObjectOutputStream已写入并刷新标题。
    如果安装了一个安全管理器,那么这个构造函数将会在覆盖ObjectInputStream.readFields或ObjectInputStream.readUnshared方法的子类的构造函数直接或间接调用时检查“enableSubclassImplementation”SerializablePermission。

    参数
    in - 要读取的输入流
    异常
    StreamCorruptedException - 如果流标题不正确
    IOException - 如果在读取流标题时发生I / O错误
    SecurityException - 如果不可信子类非法覆盖安全敏感方法
    NullPointerException - 如果 in是 null
    另请参见:
    ObjectInputStream() , readFields() , ObjectOutputStream.ObjectOutputStream(OutputStream)


    ObjectOutputStream

    ObjectOutputStream将Java对象的原始数据类型和图形写入OutputStream。 可以使用ObjectInputStream读取(重构)对象。 可以通过使用流的文件来实现对象的持久存储。 如果流是网络套接字流,则可以在另一个主机上或另一个进程中重构对象。

    public ObjectOutputStream(OutputStream out)
    throws IOException
    创建一个写入指定的OutputStream的ObjectOutputStream。 该构造函数将序列化流头写入底层流; 调用者可能希望立即刷新流,以确保在读取头部时接收ObjectInputStreams的构造函数不会阻塞。
    如果安装了一个安全管理器,那么这个构造函数会在被覆盖ObjectOutputStream.putFields或ObjectOutputStream.writeUnshared方法的子类的构造函数直接或间接调用时检查“enableSubclassImplementation”SerializablePermission。

    参数
    out - 输出流写入
    异常
    IOException - 如果在写入流标题时发生I / O错误
    SecurityException - 如果不可信子类非法覆盖安全敏感方法
    NullPointerException - 如果 out是 null
    从以下版本开始:
    1.4
    另请参见:
    ObjectOutputStream() , putFields() , ObjectInputStream.ObjectInputStream(InputStream)


    getClass().getMethod()

    public Method getMethod(String name, Class… parameterTypes)

    该方法的第一个参数name是要获得方法的名字,第二个参数parameterTypes是按声明顺序标识该方法形参类型。

    例如
    person.getClass().getMethod(“run”, String.class);

    //获得person对象的run方法,因为run方法的形参是String类型的,所以parameterTypes为String.class
    et/qq_44018692/article/details/123324837


    LoggerFactory可以在IDE控制台打印日志

    1. 作用
      LoggerFactory.getLogger可以在IDE控制台打印日志,便于开发,一般加在代码最上面

    2. 用法:
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;

    private static final Logger LOGGER = LoggerFactory.getLogger(xxx.class);

    1. 日志级别
      logger.debug、logger.info、logger.warn、logger.error、logger.fatal
      它们的作用都是把错误信息写到文本日志里
      日志级别由高到底是:fatal -> error -> warn -> info -> debug,低级别的会输出高级别的信息,高级别的不会输出低级别的信息,如等级设为Error的话,warn,info,debug的信息不会输出

    修改日志输出的级别要在log4j文件中进行配置
    项目正式发布后,一般会把日志级别设置为fatal或者error


    service.getClass().getCanonicalName():
    返回 Java 语言规范定义的底层类的规范名称
    如果是一个本地类或匿名类或其组件的数组类型没有规范名称的,则返回 null
    可以理解为返回的是正常的包含路径的类名

    service.getClass().getInterfaces():
    获得service对象所实现的所有接口

    Set.contains():
    Java 集合类中的 Set.contains() 方法判断 Set 集合是否包含指定的对象。该方法返回值为 boolean 类型,如果 Set 集合包含指定的对象,则返回 true,否则返回 false。

    ConcurrentHashMap:
    ConcurrentHashMap 是java集合中map的实现,是哈希表的线程安全版本,即使是线程安全版本,


  • 相关阅读:
    HAL库STM32串口开启DMA接收数据
    Java并发编程异步操作Future和FutureTask
    vue3实现chart水球图
    可视化滚动表格
    JS哈希表系列
    煤矿安全大模型:微调internlm2模型实现针对煤矿事故和煤矿安全知识的智能问答
    Matter over Wi-Fi: Raspberry Pi 4开发环境设置
    智能语音和自然语言处理技术
    DIRECTIVES 配置参数
    pytorch_YOLOX剪枝【附代码】
  • 原文地址:https://blog.csdn.net/weixin_43224306/article/details/127134649