相关疑难解决方法(0)

对于不同的密钥,HashMap是否是线程安全的?

如果我有两个多线程访问HashMap,但保证他们永远不会同时访问同一个密钥,那还能导致竞争条件吗?

java multithreading hashmap thread-safety

80
推荐指数
4
解决办法
5万
查看次数

递归ConcurrentHashMap.computeIfAbsent()调用永远不会终止.错误或"功能"?

前段时间,我发表了一篇关于递归计算斐波纳契数的Java 8函数式方法的博文,其中包含一个ConcurrentHashMap缓存和新的有用computeIfAbsent()方法:

import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

public class Test {
    static Map<Integer, Integer> cache = new ConcurrentHashMap<>();

    public static void main(String[] args) {
        System.out.println(
            "f(" + 8 + ") = " + fibonacci(8));
    }

    static int fibonacci(int i) {
        if (i == 0)
            return i;

        if (i == 1)
            return 1;

        return cache.computeIfAbsent(i, (key) -> {
            System.out.println(
                "Slow calculation of " + key);

            return fibonacci(i - 2) + fibonacci(i - 1);
        });
    }
} …
Run Code Online (Sandbox Code Playgroud)

java recursion concurrenthashmap java-8

71
推荐指数
2
解决办法
6258
查看次数

Java memoization方法

我遇到了一个有趣的问题,并想知道是否以及如何在Java中完成:创建一个可以记住任何函数/方法的方法.该方法具有以下参数:方法/函数及其参数.

例如,假设我有这种方法:

int addOne(int a) { return a + 1;}
Run Code Online (Sandbox Code Playgroud)

并且我使用相同的参数调用我的memoization方法两次:例如addOne和5,第一个调用应该实际调用addOne方法并返回结果并且还存储该给定参数的结果.第二次我打电话的时候应该知道之前已经打过电话,只是查看上一个答案.

我的想法是有一个类似于HashMap<Callable,HashMap<List<Objects>,Object>>你将存储以前的答案并在以后查找它们的地方.我认为这可以用lambda表达式以某种方式完成但我不熟悉它们.我不太确定写这个方法,并希望得到一些帮助.

这可以通过这种方法完成吗?

java lambda memoization

12
推荐指数
2
解决办法
1万
查看次数

当在 checkPermission 方法中加载某个类时,为什么 SecurityManager 会发出递归更新异常?

我正在将 jdk 8 升级到 11。

我在checkPermission方法中加载了一些类,然后安全管理器发出recursive update异常。但使用jdk1.8.0_202一切正常。

是什么导致了这个问题?

  1. 我的环境。
OS: macOS 10.15.6
JDK(Oracle): 11.0.8
IDE: Intellij 2019 3
Run Code Online (Sandbox Code Playgroud)
  1. 主要的
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello world");
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 安全管理器
package sm;

import java.security.Permission;

public class MySecurityManager extends SecurityManager {

    @Override
    public void checkPermission(Permission permission) {

        // Problem occurs when load ServicePermission.class
        if (permission instanceof javax.security.auth.kerberos.ServicePermission) {
            // throw new SecurityException("javax.security.auth.kerberos.ServicePermission is not allowed.");
        }
    }

    @Override
    public void checkPermission(Permission …
Run Code Online (Sandbox Code Playgroud)

java securitymanager java-security-manager java-11

4
推荐指数
1
解决办法
146
查看次数