小编Oun*_*ney的帖子

多核和java

我刚刚读到“服务器如何处理多个请求”,最终得到了 java 多线程和多核 cpu。

在计算机是单核的时候,如果 java 同时有 2 个线程,那么 jvm 调度程序将负责为每个线程分配时间。因此,两个线程永远不会并行运行,而是利用理想时间(例如,如果线程在某些资源上被阻塞)。

但这是 java7 中多核和 fork/join 框架的情况吗?我的意思是我听说通过多核我们实际上可以实现并行性。所以,如果我有两个线程运行,两个核心cpu,并且每个线程都有一个单独的核心(尽管不能保证)那么它们实际上会是并行的,因为jvm调度程序仍然会导致时间交错吗?

如果这个问题很愚蠢,我很抱歉,但我真的不确定这个问题。请帮我理解!!

谢谢!乌尼

java multithreading

5
推荐指数
1
解决办法
1006
查看次数

商店设计 - 多种产品类别

name我在阅读有关 Spring 的内容时遇到了一个由带有和字段的抽象产品类组成的示例price

接下来,有一个Battery类扩展了该类Product并添加了一个rechargable字段。然后,一个CDDrive类(也)扩展Product但添加一个capacity字段。

在现实世界中,当我们经常拥有具有许多不同属性的产品时,如何对具有任意属性和字段的任意产品进行建模?为每个产品设置一个类是否有意义?

那么,你们能建议一种实现这一目标的模式吗?

谢谢,欧尼

java design-patterns

5
推荐指数
1
解决办法
7454
查看次数

在给定的N点之间包含K点的最小区域的正方形

这个问题在网上测试中被问到了我.在笛卡尔平面中给出了N个点.将给出整数K. 目的是找到包围至少K点的正方形(最小)区域.正方形的边应平行于轴.正方形的顶点应为整数.位于两侧的任何点都不被视为在广场内.

我只能解决K = N(即所有点都在正方形).

我的解决方案是 -

    static int minarea(int[] x, int[] y, int k) {
    //Find max y
    int maxVal = Integer.MIN_VALUE;
    for(int i : y){
        if(i > maxVal){
            maxVal = i;
        }
    }
    //Find min y
    int minVal = Integer.MAX_VALUE;
    for(int i : x){
        if(i < minVal){
            minVal = i;
        }
    }

    int yLength = (maxVal-minVal)+2;

    //Find max x
    maxVal = Integer.MIN_VALUE;
    for(int i : x){
        if(i > maxVal){
            maxVal = i;
        }
    }
    //Find min x
    minVal …
Run Code Online (Sandbox Code Playgroud)

java algorithm

5
推荐指数
1
解决办法
6057
查看次数

在这种情况下,volatile是否足够?

我之前写过一段代码,它从jar文件中动态加载类.因此,基本上可以在123-de目录中存在a.jar,在456-fg目录中存在另一个a.jar.现在,根据某些参数,我决定使用哪个jar,并从123-de目录或456-fg目录加载一个类说calc.java.

为此,我必须创建类加载器并使用这些类加载器来加载calc.java

当然,每个jar应该有一个类加载器,每个类在内存中加载单个类.

为此,我使用了一个存储类加载器/类的并发hashmap.说这个并发hashmap的关键是目录名.

所以,给定一个目录,我检查是否已经存在类加载器 - 如果不是我在一个上创建然后存储它.

if(classLoaderMap.get(directoryPath) == null){
        rlock.lock();
        try{
            if(classLoaderMap.get(directoryPath) == null){

                ClassLoader classLoader = // Create classLoader here.
                classLoaderMap.put(directoryPath, classLoader);
            }
        }finally{
            rlock.unlock();
        }
    }
Run Code Online (Sandbox Code Playgroud)

此代码已经过测试,运行正常.但今天我正在重新审视这段代码,并观察到我并不真正需要concurrenthashmap,因为我使用显式锁定来写入它.我只需要内存可见性,因为我在锁外读它.所以,我真的在想这样volatile hashmap做了吗?我应该还原它(不要因为它已经测试过了)或者如果我保留它可以吗?

java concurrency multithreading volatile

3
推荐指数
1
解决办法
496
查看次数