因为担心resetGuestApiList时,多线程读取guestApiList时可能会不安全。所以加锁限制了。其他地方只对guestApiList进行只读操作,这样guestApiList应该是安全的了。
public class PermissionsUtil {
static ApiService apiService = new ApiService();
static final List<Api> guestApiList = Collections.synchronizedList(apiService.findByRoleId("guest"));
public static List<Api> getGuestApiList() {
return guestApiList;
}
/***
* 保证guestApiList的线程安全
* @param guestApiList
*/
public static void resetGuestApiList() {
synchronized (guestApiList) {
List<Api> list = apiService.findByRoleId("guest");
guestApiList.clear();
guestApiList.addAll(list);
}
}
}