【问题标题】:JAVA real time consol-control the threadsJAVA实时控制台-控制线程
【发布时间】:2016-04-21 21:55:17
【问题描述】:

我是编程初学者。我仍在学习线程和更多线程。但是现在我有一个很大的想法来编写我的第一个程序(我的意思是比简单的计算器更大)。我希望它对文件进行排序,整合到一个文件中(一个文件的多个副本在不同的本地化中 - 现在它的想法并不重要)。

但我想创建线程或其他任何东西(您有什么建议)。我是说。当我启动程序时,控制台启动,例如我必须写“my_programm run”或“my_program stop”或“my_program status”或“my_magic_tricks be_done”。我的意思是如何创建一个在后台运行的程序,例如在线程中对它进行实时字符串控制。 我试图在 Google 上找到任何对我有用的东西,但我没有找到。

请给我一个我可以使用的库或方法的名称。我会读出它是关于什么的,最后我会继续前进。

如果这是一个愚蠢的问题。我真的很抱歉让程序员组失望了。但如果能得到任何路标或线索,那就太好了。

【问题讨论】:

  • 欢迎来到 Stack Overflow。我知道,这可能是压倒性的。你能把这个问题分解成更直接回答的小问题吗?尽可能清晰和简单。在这里,您似乎想要一次做太多事情。
  • 也许你是对的。我应该使用哪些库,可以实时读取命令行。
  • 如果您是初学者,请暂时远离线程。有很多更基本的东西需要先学习,这会让你变得更好。
  • 我希望我的程序在后台运行。有可能它会工作好几个小时。因此,例如在该过程中,我希望它安全关闭(我将手动编写,他应该如何退出)。但是我怎样才能给他一个信号,让他在我的安全模式下停止线程
  • 希望我的问题更加清晰和简单。

标签: java multithreading real-time java-threads


【解决方案1】:

使用标准库的简单方法:

import java.util.Scanner;
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;

import static java.util.concurrent.TimeUnit.MILLISECONDS;

public class Example {
    private static final int POOL_SIZE = 5;
    private static final ExecutorService WORKERS = new ThreadPoolExecutor(POOL_SIZE, POOL_SIZE, 1, MILLISECONDS, new LinkedBlockingDeque<>());

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.print("> ");
            String cmd = sc.nextLine();
            switch (cmd) {
                case "process":
                    WORKERS.submit(newExpensiveTask());
                    break;

                case "kill":
                    System.exit(0);

                default:
                    System.err.println("Unrecognized command: " + cmd);
            }
        }
    }

    private static Runnable newExpensiveTask() {
        return () -> {
            try {
                Thread.sleep(10000);
                System.out.println("Done processing");
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        };
    }
}

此代码可让您在用户终端保持可用和反应性的同时异步运行繁重的任务。

【讨论】:

  • 哇,不知道它可以用这么简单的方法制作。这次真是万分感谢 ;)。我相信我会在我的想法中使用它。
  • @xross 没问题。如果有帮助,我会很高兴获得支持:D
  • 我做到了,但在我获得更多声望点后,赞成票将被标记:/。所以请耐心等待它会被投票;)。谢谢
【解决方案2】:

我建议阅读特定教程,例如 Java 语言教程(可作为一本书 - 至少,它曾经是 - 以及 Java 网站 https://docs.oracle.com/javase/tutorial/essential/concurrency/

然而,正如其他人所警告的那样,进入线程是一项挑战,除了多线程和同步方面之外,还需要对语言有很好的了解。我很想建议您首先阅读其他一些教程——通过 IO 工作等等。

【讨论】:

  • 在我看来,我可以做一个好的IO。我已经制作了类似 celluar automaton 的东西,它可以模拟细胞生活 :)。这并不难,我想是的。也许它不是那么先进,但它是一个很好的练习
猜你喜欢
  • 2014-09-28
  • 1970-01-01
  • 2023-03-04
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-11
相关资源
最近更新 更多