今天在看多线程资料的时候,发现一个方法参数是“Void”,特此记录一下。
https://github.com/RedSpider1/concurrentgithub.com讲得是 ThreadGroup - 线程组 的源码,里面有一个方法
private ThreadGroup(Void unused, ThreadGroup parent, String name) {
this.name = name;
this.maxPriority = parent.maxPriority;
this.daemon = parent.daemon;
this.vmAllowSuspension = parent.vmAllowSuspension;
this.parent = parent;
parent.add(this);
}第一个参数是“Void unused”,在 ThreadGroup 的一个构造函数中,传入了checkParentAccess(parent)方法,作为该参数传入。
public ThreadGroup(ThreadGroup parent, String name) {
this(checkParentAccess(parent), parent, name);
}而 checkParentAccess 方法的源码:
// 检查parent ThreadGroup
private static Void checkParentAccess(ThreadGroup parent) {
parent.checkAccess();
return null;
}
// 判断当前运行的线程是否具有修改线程组的权限
public final void checkAccess() {
SecurityManager security = System.getSecurityManager();
if (security != null) {
security.checkAccess(this);
}
}综上,在方法参数中传入一个方法,其返回值为 Void,作用是调用了一个校验函数,在 有参构造函数 生成对象前,对参数进行校验。
总结:
- java方法参数中可以传递方法,但实际上传递的还是值。
- 方法参数中传递为返回值为 Void 的方法,多为参数校验方法。
- Void 的值仅能为 null
PS:Void 与 void 相关的知识,见:
【漫谈】 Java 中的 Void 和 voidblog.youkuaiyun.com
本文解析了Java中ThreadGroup线程组的构造函数,特别是对于参数类型为Void的方法的作用进行了详细说明,并介绍了如何通过这种方法实现参数的有效校验。
576

被折叠的 条评论
为什么被折叠?



