小编And*_*ono的帖子

python for循环增加或减少

我必须在两个值之间循环,有时第一个值小于第二个值,有时第一个值大于第二个值(我正在处理网格中的两个单元格,第一个单元格可能位于网格的左侧)第二或反之亦然.

使用python我可以指定for循环是否必须减少或增加其值,但结果是这样的:

step = 1
if y<x:
    step = -1
for n in range(x,y,step):
    pass
Run Code Online (Sandbox Code Playgroud)

是否有更多的pythonic来获得这个?我正在使用python 2.7但是转移到python 3它不会是一个很大的问题.

python for-loop python-2.7 python-3.x

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

在守护程序线程未完成之前,JVM不会退出

我只是偶然发现了守护程序线程的奇怪行为,我无法解释.我已将代码缩减为最小,完整且可验证的样本:

public static void main(String[] args) throws InterruptedException {

    Thread runner = new Thread(() -> {

        final int SIZE = 350_000;
        for (int i = 0; i < SIZE; i++) {
            for (int j = i + 1; j < SIZE; j++) {
                if (i*j == SIZE * SIZE - 1) {
                    return;
                }
            }
        }
    });

    runner.setDaemon(true);
    runner.start();

    // Thread.sleep(1000);
    System.out.println("Exiting.");
}
Run Code Online (Sandbox Code Playgroud)

runner线程执行的代码大约需要12秒才能在我的盒子上终止,我们对它的作用不感兴趣,因为我只需要花一些时间来计算.

如果此片段按原样运行,它将按预期工作:它在启动后终止.如果我取消注释该Thread.sleep(1000)行并运行该程序,它将工作约12秒,然后打印出"退出"并终止.

据我所知,守护程序线程是如何工作的,我希望这段代码运行1秒然后终止执行,因为运行的唯一用户线程是使用main()方法启动的那个(runner后台守护程序线程)一旦1000毫秒通过,它就会到达执行结束,JVM应该停止.此外,看起来很奇怪"退出"仅在12秒后打印,而不是在程序启动时打印.

我错了吗?如何实现所需的行为(暂停一秒然后停止,独立于跑步者线程正在做什么)?

我在Linux机器上使用64位Oracle JDK 1.8.0_112,如果从IDE或命令行启动它也具有相同的行为.

谢谢,安德烈

java multithreading

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

WorkManager - 如何从定期工作中获取 OutputData

我正在使用PeriodicWorkRequest 每小时从互联网获取一些数据。我想用工作人员返回的结果更新我的应用程序的 UI。这是我现在的代码:

workManager.enqueueUniquePeriodicWork("name", ExistingPeriodicWorkPolicy.REPLACE, work)

workManager
  .getWorkInfoByIdLiveData(work.id)
  .observe(this, { workInfo ->
     if (workInfo?.state == WorkInfo.State.SUCCEEDED) {
        // it never arrives here for updating the UI
     }
  }
Run Code Online (Sandbox Code Playgroud)

给定周期性工作的生命周期,状态SUCCEEDED永远不会达到,因为它在RUNNING和之间跳跃ENQUEUED;在这两种状态下,Result.OutputData对象是空的,所以我不能使用它。

该应用程序被认为不会一直保持打开状态,但当它打开时,它应该显示从工作人员检索到的最后数据。

如何检索函数返回的结果的 OutputData doWork()?定期工作是适合我的用例的工具吗?

android android-workmanager

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