小编Dog*_*xed的帖子

ExecutorService.submit(Runnable task,T result)中的'result'是什么做的?

看看javadocs,它只是说

<T> Future<T> submit(Runnable task, T result)

提交Runnable任务以执行并返回表示该任务的Future.Future的get方法将在成功完成后返回给定的结果.

参数:

任务 - 要提交的任务

结果 - 返回的结果

但它对结果有什么影响?它存储了什么吗?它只是使用结果类型来指定类型Future<T>

java synchronization

20
推荐指数
3
解决办法
7926
查看次数

为什么 VBScript 的 bitwise 并且在一种情况下失败?

我正在使用 VBScript 来解析一些 Windows 安装程序中的返回码。我想确认我是否正确地执行了按位运算,所以我记下了一些Echo语句,发现其中一个没有产生我预期的结果:

WScript.Echo (&H01010101)                ' prints 16843009 (0x01010101). Correct!
WScript.Echo (&H01010101 And &Hff000000) ' prints 16777216 (0x01000000). Correct!
WScript.Echo (&H01010101 And &H00ff0000) ' prints 65536    (0x00010000). Correct!
WScript.Echo (&H01010101 And &H0000ff00) ' prints 16843008 (0x01010100). What's happening here?
WScript.Echo (&H01010101 And &H000000ff) ' prints 1        (0x00000001). Correct!
Run Code Online (Sandbox Code Playgroud)

第四个似乎只屏蔽了底部的两个字节。好的,当然,我想我可以看到在它被Anded之前它可能被转换为可以容纳它的最小 int 的位置,因此掩码比被掩码的短或类似的东西,但是为什么最后的情况有效?

如果我在最高字节中放入一些东西,它会起作用:

WScript.Echo (&H01010101 And &Hf000ff00) ' prints 256      (0x01010100).
Run Code Online (Sandbox Code Playgroud)

还有一些其他情况:

WScript.Echo (&H01010101 And &H0000f0ff) ' prints 16842753 (0x01010001).
WScript.Echo (&H01010101 And &Hf00000ff) ' …
Run Code Online (Sandbox Code Playgroud)

vbscript bit-manipulation bitwise-operators

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

完成所有线程(池中)后如何打印摘要消息?

我有一个命令行应用程序.它运行循环说100次,并在循环中使用线程调度任务.我正在使用ExecutorService,因此任何时候都有4个线程在运行.

循环结束后,我想打印摘要消息.例如,完成所有100个任务所花费的时间.当我逐步完成代码时,调试器直接进入摘要部分,但其他任务仍在运行.我理解这是因为每个线程都是自己运行的.那么如何在所有线程完成后才打印消息?

ExecutorService exec = Executors.newFixedThreadPool(4);

long startTime = System.currentTimeMillis();

for (int i = 0; i < 100; i++) {

    Runnable requestHandler = new Runnable() {
        @Override
        public void run() {
            try {
                // call task function in here
            } catch (Exception ex) {
            }
        }
    };
    exec.execute(requestHandler);
}

exec.shutdown();

long endTime = System.currentTimeMillis();

LOGGER.info("******************SUMMARY******************");
LOGGER.info("Time taken : " + ((endTime - startTime)/1000) + " seconds, " 
                            + ((endTime - startTime)/1000/60) + " minutes");
Run Code Online (Sandbox Code Playgroud)

java multithreading threadpool

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