Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA实时控制台控制线程_Java_Multithreading_Real Time_Java Threads - Fatal编程技术网

JAVA实时控制台控制线程

JAVA实时控制台控制线程,java,multithreading,real-time,java-threads,Java,Multithreading,Real Time,Java Threads,我是编程的初学者。我仍在学习线程和更多线程。但是现在我有了一个很大的想法来编写我的第一个程序(我的意思是比简单的计算器更大)。我希望它能够对文件进行排序,集成到一个文件中(一个文件的多个副本具有不同的本地化方式—现在这种想法已经不重要了) 但是我想创建线程,或者其他任何东西(你的建议是什么)。我是说。当我启动程序时,控制台启动,例如,我必须编写“我的程序运行”或“我的程序停止”或“我的程序状态”或“我的魔术完成”。我的意思是如何创建一个在后台工作的程序,比如线程,并对其进行实时字符串控制。 我试

我是编程的初学者。我仍在学习线程和更多线程。但是现在我有了一个很大的想法来编写我的第一个程序(我的意思是比简单的计算器更大)。我希望它能够对文件进行排序,集成到一个文件中(一个文件的多个副本具有不同的本地化方式—现在这种想法已经不重要了)

但是我想创建线程,或者其他任何东西(你的建议是什么)。我是说。当我启动程序时,控制台启动,例如,我必须编写“我的程序运行”或“我的程序停止”或“我的程序状态”或“我的魔术完成”。我的意思是如何创建一个在后台工作的程序,比如线程,并对其进行实时字符串控制。 我试图在谷歌上找到任何对我有用的东西,但我没有找到

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


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

我建议你阅读一些特定的教程,比如Java语言教程(作为一本书提供,至少以前是这样的,还有Java网站)


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

我建议您阅读一些特定的教程,例如Java语言教程(作为一本书提供——至少以前是这样——以及Java网站上)


然而,正如其他人所警告的,进入线程是一个挑战,除了多线程和同步之外,还需要对语言有很好的了解。首先,我建议您阅读一些其他教程-使用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);
            }
        };
    }
}
import java.util.Scanner;
导入java.util.concurrent.LinkedBlockingDeque;
导入java.util.concurrent.ThreadPoolExecutor;
导入静态java.util.concurrent.TimeUnit.millizes;
公开课范例{
私有静态最终整数池大小=5;
private static final executor service WORKERS=new ThreadPoolExecutor(池大小,池大小,1,毫秒,new LinkedBlockingDeque());
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
while(true){
系统输出打印(“>”);
字符串cmd=sc.nextLine();
开关(cmd){
案例“过程”:
WORKERS.submit(newExpensiveTask());
打破
“杀人”案:
系统出口(0);
违约:
System.err.println(“无法识别的命令:”+cmd);
}
}
}
私有静态可运行newExpensiveTask(){
返回()->{
试一试{
睡眠(10000);
System.out.println(“完成处理”);
}捕捉(中断异常e){
抛出新的运行时异常(e);
}
};
}
}

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

使用标准库执行此操作的简单方法:

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);
            }
        };
    }
}
import java.util.Scanner;
导入java.util.concurrent.LinkedBlockingDeque;
导入java.util.concurrent.ThreadPoolExecutor;
导入静态java.util.concurrent.TimeUnit.millizes;
公开课范例{
私有静态最终整数池大小=5;
private static final executor service WORKERS=new ThreadPoolExecutor(池大小,池大小,1,毫秒,new LinkedBlockingDeque());
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
while(true){
系统输出打印(“>”);
字符串cmd=sc.nextLine();
开关(cmd){
案例“过程”:
WORKERS.submit(newExpensiveTask());
打破
“杀人”案:
系统出口(0);
违约:
System.err.println(“无法识别的命令:”+cmd);
}
}
}
私有静态可运行newExpensiveTask(){
返回()->{
试一试{
睡眠(10000);
System.out.println(“完成处理”);
}捕捉(中断异常e){
抛出新的运行时异常(e);
}
};
}
}

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

欢迎使用堆栈溢出。我知道,这可能是压倒性的。你能把这个问题分解成更直接的小问题吗?尽可能的清晰和简单。在这里,你似乎想同时做太多的事情。也许你是对的。我应该使用哪些库来实时读取命令行。如果你是初学者,现在不要使用线程。首先,有很多更基本的东西需要学习,这将对你有更好的帮助。我希望我的程序在后台运行。它可能会工作很多小时。因此,例如,在这个过程中,我希望它安全地关闭(我将手动编写它,他应该如何退出)。但是我怎样才能给他一个信号,让他在我的安全模式下停止线程呢?希望我的问题更清楚、更简单。欢迎来到堆栈溢出。我知道,这可能是压倒性的。你能把这个问题分解成更直接的小问题吗?尽可能的清晰和简单。在这里,你似乎想同时做太多的事情。也许你是对的。什么天秤座