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);
}
};
}
}
此代码允许您 运行 异步执行繁重的任务,同时用户终端保持可用和反应。
我是编程初学者。我仍在学习线程和更多线程。但现在我有了一个相当大的想法来编写我的第一个程序(我的意思是比简单的计算器更大)。我希望它对文件进行排序,整合为一个文件(一个文件的多个副本在不同的本地化 - 现在这个想法并不重要)。
但我想创建线程或其他任何东西(您有什么建议)。我是说。当我启动程序时,控制台启动,例如我必须写 "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);
}
};
}
}
此代码允许您 运行 异步执行繁重的任务,同时用户终端保持可用和反应。