【JAVA】Java实现rpc框架QJAVA所需方法(类似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的实现,是哈希表的线程安全版本,即使是线程安全版本,


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mumu_wangwei

主修"红尘道--红尘练心"

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值