我试着运行一个程序,使用线程显示带有数字的乘法、除法、加法和减法表。
但是我希望数字被乘以或相加等。由用户选择。
也就是说,程序应该在用户为每个操作选择一个数字后运行,然后显示结果。
import java.util.Scanner;
//-------------------------------------------------------------------
// Clasa pentru inmultire numerelor /
//----------------------------------/
class theMultiplicationTable {
void printNumber(int n) {
synchronized (this) {
Scanner multiplai = new Scanner(System.in); // Create a Scanner object
System.out.println("Enter a number to be multiplai");
n = multiplai.nextInt(); // Read user input
System.out.println("\n---------------------------");
System.out.println("Table of Multiplication " + n);
for (int i = 1; i <= 10; i++) {
System.out.println(n + " * " + i + " = " + (n * i));
try {
Thread.sleep(400);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
}
class MyThread1 extends Thread {
theMultiplicationTable inmultire;
MyThread1(theMultiplicationTable inmultire) {
this.inmultire = inmultire;
}
@Override
public void run() {
inmultire.printNumber(7);
}
}
// -------------------------------------------------------------------
// Clasa pentru impartirea numerelor /
// ---------------------------------/
class divisionBoard {
void printNumber(float n1) {
synchronized (this) {
System.out.println("\n---------------------------");
System.out.println("Table of Division Board " + n1);
for (int i = 1; i <= 10; i++) {
System.out.println(n1 + " / " + i + " = " + (n1 / i));
try {
Thread.sleep(400);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
}
class MyThread2 extends Thread {
divisionBoard impartirea;
MyThread2(divisionBoard impartirea) {
this.impartirea = impartirea;
}
@Override
public void run() {
impartirea.printNumber(7);
}
}
// -------------------------------------------------------------------
// Clasa pentru adunarea numerelor /
// -------------------------------/
class assemblyBoard {
void printNumber(int n3) {
synchronized (this) {
System.out.println("\n---------------------------");
System.out.println("Table of Assembly Board " + n3);
for (int i = 1; i <= 10; i++) {
System.out.println(n3 + " + " + i + " = " + (n3 + i));
try {
Thread.sleep(400);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
}
class MyThread3 extends Thread {
assemblyBoard adunarea;
MyThread3(assemblyBoard adunarea) {
this.adunarea = adunarea;
}
@Override
public void run() {
adunarea.printNumber(7);
}
}
// -------------------------------------------------------------------
// Clasa pentru scaderea numerelor /
// -------------------------------/
class decreaseTable {
void printNumber(int n4) {
synchronized (this) {
System.out.println("\n---------------------------");
System.out.println("Table of Decrease table " + n4);
for (int i = 1; i <= 10; i++) {
System.out.println(n4 + " - " + i + " = " + (n4 - i));
try {
Thread.sleep(400);
} catch (Exception e) {
System.out.println(e);
}
}
}
}
}
class MyThread4 extends Thread {
decreaseTable scaderea;
MyThread4(decreaseTable scaderea) {
this.scaderea = scaderea;
}
@Override
public void run() {
scaderea.printNumber(7);
}
}
public class Invi {
public static void main(String args[]) throws InterruptedException {
theMultiplicationTable obj = new theMultiplicationTable();
MyThread1 t1 = new MyThread1(obj);
t1.start();
divisionBoard obj2 = new divisionBoard();
MyThread2 t2 = new MyThread2(obj2);
MyThread2.sleep(5000);
t2.start();
assemblyBoard obj3 = new assemblyBoard();
MyThread3 t3 = new MyThread3(obj3);
MyThread3.sleep(5000);
t3.start();
decreaseTable obj4 = new decreaseTable();
MyThread4 t4 = new MyThread4(obj4);
MyThread3.sleep(5000);
t4.start();
}
}
你的问题不清楚。显然你想从用户那里得到一位数的输入,然后为四个数学运算(加、减、乘、除)中的每一个建立一个结果表。
你的标题说创建四个线程,然后一次运行一个。这没有意义。我们使用线程一次运行多个活动。一次只运行一个线程违背了线程的目的。所以我假设你心里有其他意思,仍然是个谜。
在现代Java中,我们很少需要直接处理线程
类。相反,使用添加到Java5中的Executors框架。
将四项任务中的每一项定义为Runnable
或Callable
。如果要从任务中收集结果,请使用Callable
。将用户选择的数字作为参数传递给每个函数的构造函数。
创建executor服务,例如Executors。newCachedThreadPool()
。通过调用invokeAll
提交四项任务。你会得到一个未来
对象的列表。每个Future
都是您对每个任务的状态和结果的控制。
按照Javadoc中的示例代码,在您的执行器服务上调用关闭
和等待终止
。
然后检查Future
对象,看看它们是否都成功了,如果您使用了Callable
,则收集结果。
所有这些都已经在堆栈溢出中多次讨论过了。因此,搜索以了解更多信息,并查看示例代码。
#include <stdio.h> #include <pthread.h> int a = 0; int b = 0; void *thread1_func(void *p_arg) { while (1) { a++; sleep(1); } } void *thread2_fu
我用的是Netty camel-Netty:jar:2 . 10 . 0 . red hat-60024。下面是我对Netty监听器的配置 荨麻:tcp://10.1.33.204:9001?textline=true 在这里,我看到基于调试日志,Netty只创建一个工作线程,所以传入的消息被阻塞,直到现有的消息被处理。 喜欢: 2014-08-23 12:36:48,394|DEBUG|w I/
问题内容: 我们在JMS使用者中使用ThreadPoolExecutor,并将其注入DefaultMessageListenerContainer中。我希望这会在许多消息上运行并发线程,但是我们的日志显示线程ID不会改变,而我们的日志显示对于不同的消息处理,线程ID始终为24。 在这种情况下,这是spring配置: 在不将threadPoolExectuor Bean注入DefaultMessag
在一个android服务中,我创建了用于执行一些后台任务的线程。 我遇到一个情况,线程需要在主线程的消息队列上发布特定任务,例如。 有没有方法获取主线程的并从我的另一个线程向它发布/?
我如何启动两个线程,其中thread1首先执行,thread2在thread1结束时启动,而主方法线程可以在不锁定其他两个线程的情况下继续工作? 我尝试了join(),但是它需要从线程调用,线程必须等待另一个线程,没有办法执行类似thread2.join(thread1)的操作;因此,如果我在main()中调用join,我将有效地停止主线程的执行,而不仅仅是Thread2的执行。 #编辑:为什么我
这里我用java开发。 我有一个for循环中的线程,我想连续运行5次。不幸的是,循环在第二次运行时停止,出现了一个错误: 异常在线程"main"java.lang.IllegalThreadStateExctive在java.base/java.lang.Thread.start(Thread.java:793) 我知道这个错误是什么意思,但是我要求他在确定完成线程时恢复循环,这样就不会有任何错误