线程池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控制台打印日志
-
作用
LoggerFactory.getLogger可以在IDE控制台打印日志,便于开发,一般加在代码最上面 -
用法:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private static final Logger LOGGER = LoggerFactory.getLogger(xxx.class);
- 日志级别
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的实现,是哈希表的线程安全版本,即使是线程安全版本,