以下是我用于使用两个线程计算数字的阶乘的代码。 当我尝试编译它时,它说' ....'使用或覆盖已弃用的API,有人请帮助解决此问题。
import java.lang.Thread;
import java.util.Scanner;
class A extends Thread
{
int n;
int fact=1;
int i;
A(int x)
{
n=x;
i=n;
}
public void run()
{
if(i>0)
{
fact=fact*i;
i--;
}
else
System.out.print(fact);
suspend();
}
}
class B extends Thread
{
int i;
int n;
int fact=1;
B(int x)
{
n=x;
i=n;
}
public void run()
{
if(i>0)
{
fact=fact*i;
i--;
}
else
System.out.print(fact);
suspend();
}
}
class refact
{
public static void main(String args[])
{
int n;
System.out.print("Enter the number you want :");
Scanner a = new Scanner(System.in);
n=a.nextInt();
System.out.print("\n\n");
A newthreadA = new A(n);
newthreadA.start();
B newthreadB = new B(n);
newthreadB.start();
}
}
此外,如果其他人有更好的想法使用两个线程计算数字的阶乘,请提及。 谢谢!
答案 0 :(得分:3)
您收到错误,因为不推荐使用Thread.suspend。以下是docs:
中的更多信息为什么不推荐使用Thread.suspend和Thread.resume?
Thread.suspend本身就容易出现死锁。如果是目标线程 在监视器上保持锁定,以保护关键系统资源 它被挂起,没有线程可以访问此资源,直到目标 线程恢复。如果线程将恢复目标线程 尝试在调用resume,deadlock之前锁定此监视器 结果。这种死锁通常表现为“冻结” 过程
答案 1 :(得分:1)
这里使用的是在Java中弃用的suspend()。
尝试使用任何类似executing
的布尔变量来停止线程。
public void run() {
this.executing= true;
while (this.executing) {
try {
//code of factorial
} catch (InterruptedException e) {
this.executing= false;
}
}