JAVA 实时控制线程

JAVA real time consol-control the threads

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

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

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

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

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

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

使用标准库的简单方法:

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);
            }
        };
    }
}

此代码允许您 运行 异步执行繁重的任务,同时用户终端保持可用和反应。