小编The*_*ode的帖子

方法调用Future.get()块.这真的很可取吗?

在将此标记为重复之前,请仔细阅读该问题.

下面是伪代码的片段.我的问题是 - 以下代码是否没有打败并行异步处理的概念?

我问这个的原因是因为在下面的代码中,主线程将提交一个要在不同线程中执行的任务.在队列中提交任务后,它会阻止Future.get()方法为任务返回值.我宁愿在主线程中执行任务,而不是提交到不同的线程并等待结果.通过在新线程中执行任务我获得了什么?

我知道你可以等待有限的时间等,但如果我真的关心结果呢?如果要执行多个任务,问题会变得更糟.在我看来,我们只是同步地完成工作.我知道Guava库提供了非阻塞侦听器接口.但我很想知道我对Future.get()API的理解是否正确.如果它是正确的,为什么Future.get()设计为阻止从而打败整个并行处理过程?

注 - 为了记录,我使用JAVA 6

public static void main(String[] args){

private ExectorService executorService = ...

Future future = executorService.submit(new Callable(){
    public Object call() throws Exception {
        System.out.println("Asynchronous Callable");
        return "Callable Result";
    }
});

System.out.println("future.get() = " + future.get());
}
Run Code Online (Sandbox Code Playgroud)

java multithreading asynchronous executorservice executor

54
推荐指数
3
解决办法
4万
查看次数

普罗米修斯中的刮擦间隔和评估间隔

我的抓取间隔和评估间隔相差很远,如下所示(15 秒与 4 米)。当我向端点提供指标时,我发现规则每 4m 评估一次,这是预期的。但是,我不明白的是,它不会评估过去 4 分钟提供的所有指标的规则。我很难理解两个时钟(抓取和评估)的工作原理。此外,与此相关的文档非常稀疏。任何指示都会有很大帮助。我毫不犹豫地将抓取时间和评估时间更改为各 15 秒。但我需要了解将时钟分开的后果。

# my global config
global:
  scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 4m # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets:
       - testmanager:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
   - …
Run Code Online (Sandbox Code Playgroud)

prometheus prometheus-alertmanager

17
推荐指数
2
解决办法
3万
查看次数

Grizzly 是 Web 服务器(基于 NIO)还是框架

从官方文档来看,我认为 Grizzly 是一个基于 NIO 的框架,我们可以使用它构建可扩展的 Web 服务器。但是,我也意识到 Grizzly 在 Glassfish(具体来说是 v3)中用作 HTTP 连接器(前端)。

如果 Glassfish 将它用作连接器,它是使用公开的 API 自定义编写的,还是有现成的参考实现。我也可以将 Grizzly 作为独立的网络服务器运行吗?

Glassfish-Grizzly 集成文档在这方面非常有限。此外,如果有一个链接,以图解方式解释了 Grizzly 如何适应 Glassfish 架构(消息流)的架构,请分享。

java grizzly glassfish-3

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

liquibasechangeset顺序在后续更新中是否会更改?

liqibase中的CHANGESET执行是否取决于它在xml中的位置?例如,如果我有一个liquibase脚本,如下所示

<changeSet id="20140211_001" author="test">
    <createTable tableName="alarm_notification_archive">
        <column name="id" type="bigint">
            <constraints nullable="false" />
        </column>

        <column name="event_timestamp" type="timestamp" defaultValue="0000-00-00 00:00:00">
            <constraints nullable="false" />
        </column>
    </createTable>
</changeSet>

<changeSet id="20140210_001" author="test">
    <sql>ALTER TABLE `notification_archive` ADD COLUMN
        `is_Alarm_Outstanding` BOOLEAN DEFAULT FALSE</sql>
    <rollback>
        <sql>ALTER TABLE notification_archive DROP COLUMN
            is_Alarm_Outstanding
                </sql>
    </rollback>
</changeSet>
Run Code Online (Sandbox Code Playgroud)

我的理解是changeset排序是:

  1. 20140211_001
  2. 20140210_001

如果我现在在1和2之间添加另一个变更集

<changeSet id="20140211_001" author="test">
    <createTable tableName="alarm_notification_archive">
        <column name="id" type="bigint">
            <constraints nullable="false" />
        </column>

        <column name="event_timestamp" type="timestamp" defaultValue="0000-00-00 00:00:00">
            <constraints nullable="false" />
        </column>
    </createTable>
</changeSet>

<changeSet id="20140212_001" author="test">
    <sql>ALTER TABLE …
Run Code Online (Sandbox Code Playgroud)

mysql liquibase

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

使用Java流从集合中查找最小和最大数量

下面是代码片段,正如预期的那样,在编译时失败.

我真正想要做的是使用流找到所有列表中的最小值和最大值.

public class Delete {

   public static void main(String[] args) {

      List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 677, 0);
      List<Integer> list1 = Arrays.asList(11, 12, 23, 34, 25, 77);
      List<Integer> list2 = Arrays.asList(12, 21, 30, 14, 25, 67);
      List<Integer> list3 = Arrays.asList(41, 25, 37, 84, 95, 7);

      List<List<Integer>> largeList = Arrays.asList(list, list1, list2, list3);

      System.out.println(largeList.stream().max(Integer::compare).get());
      System.out.println(largeList.stream().min(Integer::compare).get());
   }

}
Run Code Online (Sandbox Code Playgroud)

java java-8 java-stream

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

基于系统属性注入 spring bean

我的项目框架的设计方式使我无法访问 Springs ApplicationContext。但是,我想根据系统属性注入 bean。如果该属性设置为 true,则注入所有 bean,否则不注入任何 bean。这有没有可能。像下面这样的东西。顺便说一句,Spring 版本是 3.0

    <!-- all beans -->
      <bean></bean>
      <bean></bean>
      <bean></bean>
      <bean class ="org.springframework...PropertyPlaceHolderConfigurer>
        <property name = "properties"
          <value>
            OBJECT_INSTANCE_ID =0
          </value>
        </property>
     <bean>
Run Code Online (Sandbox Code Playgroud)

简而言之,该属性是使用 PropertyPlaceHolderConfigurer 读取的。所有其他 bean 应根据值 OBJECT_INSTANCE_ID 加载。该属性在位于 /etc/../system.property 的属性文件中定义

java spring dependency-injection

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

使用 ExecutorService 执行限时任务

我有长时间运行的任务提交给ExecutorService. 该任务可能会运行相当长的时间。同时,新的任务被提交到内部阻塞队列。

提交的任务完成后,会发送回通知以从队列中释放任务以供执行。然而,有时,由于编程错误或网络问题,通知不会被触发。在这种情况下,我的任务队列可能会变得非常大,并且我可能会遇到任务可能永远留在队列中的情况。

为了克服这个问题,我正在考虑编写一个线程,该线程将定期检查任务在队列中空闲的时间。如果任务在队列中等待了 15 分钟,我会假设之前提交的任务遇到了错误,因此没有返回。然后我将从队列中逐出该任务并允许其执行。

是否有任何现有机制可以处理此问题,或者我必须编写此自定义逻辑?

注:
我不喜欢的原因ScheduledExecutor是因为并非所有任务都要定期执行。只有故障场景才应在一定延迟后执行。

编辑 架构的简要概述我正在设计的解决方案应该支持许多并发静态文件下载。通常可能有数千个下载请求。下载请求由基于 UI 的应用程序触发。这样我就知道何时会触发请求。利用这种方法,我打算限制下载请求。

当用户创建 300 个下载请求时会发生什么?

  1. 应用程序工作线程创建 300 个下载任务
  2. 提交了 100 个任务。我定义了最大 HTTP 线程池大小,例如 100。这意味着我可以支持最多 100 个同步并行下载 (servlet 2.5) 该任务反过来要求远程 HTTP 客户端执行 HTTP get。请注意,HTTP 线程尚未发挥作用
  3. 剩余 200 个请求正在排队。
  4. HTTP 客户端执行 HTTP Get。HTTP 线程现在以阻塞方式传输响应。
  5. 收到 200 OK 后,我会创建一条通知,通知其中一个客户端已完成下载。
  6. 现在,限制将释放/提交先前排队的 200 个请求中的任务之一。

在我能够接收响应(HTTP 200/HTTP 500 等)的情况下,限制机制就像一个魅力。但是,例如,servlet 本身抛出异常,我没有收到任何响应来表明 HTTP 工作线程是空闲的。因此,该任务有可能永远保留在队列中。为了克服这个问题,我正在考虑一种基于计时器的方法,如果 15 分钟内没有 HTTP 响应,则提交下一个队列任务来执行。一种避免重大内存泄漏的回退机制。

java multithreading executorservice threadpoolexecutor

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

windows/linux box上的文件分隔符问题

下面的枚举帮助我避免在 JUNIT 测试用例中不同位置的硬编码目录值。这似乎在 WINDOW 盒子上的 IDE 内的开发环境中工作。

只要我将此代码放在 LINUX 框上,JUNIT 类就找不到目录。该Files.exists(SOURCEPATH)返回false。相同的代码在 IDE(Windows)上返回 true。关于这里出了什么问题的任何指示?

public enum DIRECTORY {

    OUTPUT("resources/output"), RESOURCE("resources/resource"), PROCESSED_OUTPUT(
            "resources/output/resources/resource"), EXPLODED_WEBAPPS(
            "temp/webapps"), WEBAPPS("webapps");

    private String _name;

    private DIRECTORY(String _name) {

        this._name = _name;

    }

    public String getDirectoryName() {
        return _name;
    }

}
Run Code Online (Sandbox Code Playgroud)

枚举的示例使用代码

private void restore_csv_files() {

        Path _processed_output = Paths.get(DIRECTORY.PROCESSED_OUTPUT
                .getDirectoryName());
        Path resource = Paths.get(DIRECTORY.RESOURCE.getDirectoryName());

        FileUtility.copy_files(_processed_output, resource);
        FileUtility.delete_files(_processed_output);
        FileUtility.delete_directory(_processed_output);

    }
Run Code Online (Sandbox Code Playgroud)

文件工具类

public static void copy_files(Path sourcePath, Path targetPath) {
        if (Files.exists(sourcePath) && Files.exists(targetPath)) {
            try { …
Run Code Online (Sandbox Code Playgroud)

java io junit nio file

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

Angular Tree 组件构建失败,并显示消息“没有导出的成员‘可取消’”

我在项目中使用Angular Tree 组件,在过去的几天里,我在构建 Angular 应用程序时遇到以下错误。经过一番平静的斗争,问题得到了解决。我在下面为社区发布我的答案。

2020-09-02T13:10:19.5809754Z ERROR in node_modules/angular-tree-component/dist/components/tree-viewport.component.d.ts(3,10): error TS2305: Module '"D:/eb/A3322/work/2/s/node_modules/@types/lodash/index"' has no exported member 'Cancelable'.
2020-09-02T13:10:19.5810790Z 
2020-09-02T13:10:19.7050898Z npm ERR! code ELIFECYCLE
2020-09-02T13:10:19.7053154Z npm ERR! errno 1
Run Code Online (Sandbox Code Playgroud)

build angular angular-tree-component

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

使用"HAVING"子句忽略SQL函数调用

对于以下查询,MAX函数似乎完全被忽略.MAX函数对查询结果没有影响

SELECT alarm_severity_id
FROM alarm_notification
WHERE alarm_life_cycle_id = 25
having MAX(event_timestamp);
Run Code Online (Sandbox Code Playgroud)

mysql sql

0
推荐指数
1
解决办法
85
查看次数