JAVA实时控制台-控制线程

标签 java multithreading real-time java-threads

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

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

请给我一个我可以使用的库或方法的名称。我会读出它的内容,最后我会继续它。

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

最佳答案

使用标准库的简单方法:

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

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

关于JAVA实时控制台-控制线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36781166/

相关文章:

java - 为什么我在这个 java Thread 程序中得到这个输出?

java - java.io.Buffer* 流与普通流有何不同?

java - 这是饥饿吗?

Java - 跳过 CSV 文件中的值

Java,IntelliJ IDEA 设置问题?

multithreading - 具有多线程的 Scala 单例对象

java - 在具有 2 个内核的机器上拥有 2 个以上的工作线程是否有意义?

javascript - 实时 Web 应用程序的短轮询与长轮询?

java - 实时数据提取/交易捕获

java - 如何实时更改两个JTextFiled?