test

PrivilegedCallable类

image-20221030145826080

&#8195PrivilegedCallable则是对Callable任务 的运行上下文的控制,它是Callable接口的一个特殊实现类,它表明Callable对象有某种特权来访问系统的某种资源,增加了权限控制功能的转换,对参数传进来的Callable增加权限控制功能的调用,可以将PrivilegedCallable看成是对Callable接口的封装,并且这个类也继承了Callable接口。

PrivilegedCallable类是一个final类,它不能被继承,因此PrivilegedCallable类的成员方法没有机会被重写,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会再被扩展,那么就设计为final类。

同时它又是一个静态内部类,类比于静态方法,静态内部类不需要创建外部类对象就能使用,它不能访问外部类的成员域,只能访问静态变量

image-20221030153429124

创建静态内部类的语法

1.在外部类内部创建内部类对象(Inner inner = new Inner())

Callable task = null;
PrivilegedCallable a = new PrivilegedCallable(task);

2.在外部类外部创建内部类对象,外部类.内部类 Executors.PrivilegedCallable<> a = new Executors.PrivilegedCallable();

Callable<Integer> task = null;
Executors.PrivilegedCallable<Integer> a  = new Executors.PrivilegedCallable<>(task);

java 中泛型标记符:

  • E - Element (在集合中使用,因为集合中存放的是元素)
  • T - Type(Java 类)
  • K - Key(键)
  • V - Value(值)
  • N - Number(数值类型)
  • - 表示不确定的 java 类型

在PrivilegedCallable类中有两个成员变量,分别是Callable接口的实例对象和AccessControlContext类的实例对象,其中,AccessControlContext类可以理解为一个具有系统资源访问决策的上下文类,通过这个类可以访问系统的特定资源。

image-20221030161215173

final修饰的变量即成为常量,只能赋值一次,但是final所修饰局部变量和
员变量有所不同。
(1)final修饰的局部变量必须使用之前被赋值一次才能使用
(2)final修饰的成员变量在声明时没有赋值的叫“空白final变量”,空白final变量必须在构造器方法或静态代码块中初始化。
image-20221030161428580

image-20221030161530226

image-20221030161629094

native方法是java与其他语言协作的时候使用的,底层实现不是java(c,c++),所以直接调用就好,不需要管他底层实现

方法的字面意思就是获取能够访问系统栈的决策上下文对象

返回访问控制上下文。即,它获取堆栈上所有调用方的保护域,从具有非空保护域的第一个类开始。
返回:
基于当前堆栈的访问控制上下文,如果只有特权系统代码,则为 null。

image-20221030161724110

image-20221030162704526

如果需要,获取基于堆栈的上下文 (this) 并将其与特权或继承的上下文结合起来。无论分配的上下文是否来自立即封闭的受限 doPrivileged(),都会标记任何受限权限范围。有限的权限范围可以间接地从继承的父线程或先前由 getContext() 捕获的分配的上下文中流出。

一个类如果实现一个接口,那它必然要实现接口里的所有方法,内部方法callable接口有一个抽象方法call()

image-20221030163154943

image-20221030162947868

image-20221030163419144

创建了一个接口的匿名对象,需要实现一下接口的方法

image-20221030163514209

image-20221030164153534

image-20221030164248083

在PrivilegedExceptionAction接口对象的run()方法中调用Callable接口的call()方法来执行最终的业务逻辑,并且返回泛型对象。

posted @ 2022-11-05 11:16  工地在召唤  阅读(31)  评论(0编辑  收藏  举报