我正在尝试使用isALive和join方法但它抛出的错误就像找不到符号....请告诉我这个程序中的错误究竟在哪里。 什么是join方法的用法。我知道它是等待线程完成但我想详细说明。
class newthread1 implements Runnable {
newthread1() {
Thread t = new Thread(this, "FirstThread");
System.out.println("Child Thread:" + t);
t.start();
}
public void run() {
System.out.println("We are in processing for 1st thread");
int p = 1000, t = 3;
double r = 3.5, si;
try {
si = (p * r * t) / 100;
System.out.println("Simple Interest:" + si);
} catch (ArithmeticException e) {
System.out.println("Error:" + e);
}
}
}
class newthread2 implements Runnable {
newthread2() {
Thread t = new Thread(this, "SecondThread");
System.out.println("Child Thread:" + t);
t.start();
}
public void run() {
try {
System.out.println("We are in processing for 2nd thread");
double a, r = 4.3;
int p = 1000, n = 3;
double temp = Math.pow((1 + r / 100), n);
a = temp * p;
System.out.println("Compound interest:" + a);
} catch (ArithmeticException e) {
System.out.println("Error:" + e);
}
}
}
class mainthread {
public static void main(String args[]) {
newthread1 t11 = new newthread1();
new newthread2();
boolean b = t1.t.isAlive();
System.out.println("Thread is alive:" + b);
t1.t.join();
}
}
答案 0 :(得分:4)
解决方案1 将主要方法更改为
class mainthread {
public static void main(final String args[]) throws InterruptedException {
Thread thread = new Thread(new newthread1());
newthread1 t11 = new newthread1();
new newthread2();
boolean b = thread.isAlive();
System.out.println("Thread is alive:" + b);
thread.join();
}
}
并运行线程调用thread.start()
,创建可运行对象的实例将不会自动开始运行。你明确告诉线程开始或停止。
解决方案2
或者您可以将线程对象't'
创建为global varibable
并将类更改为
class newthread1 implements Runnable {
public Thread t;
newthread1() {
t = new Thread(this, "FirstThread");
System.out.println("Child Thread:" + t);
t.start();
}
@Override
public void run() {
System.out.println("We are in processing for 1st thread");
int p = 1000, t = 3;
double r = 3.5, si;
try {
si = p * r * t / 100;
System.out.println("Simple Interest:" + si);
} catch (ArithmeticException e) {
System.out.println("Error:" + e);
}
}
public Thread getT() {
return t;
}
}
然后主要方法为
class mainthread {
public static void main(final String args[]) throws InterruptedException {
newthread1 t11 = new newthread1();
new newthread2();
boolean b = t11.t.isAlive();
System.out.println("Thread is alive:" + b);
t11.t.join();
}
}
答案 1 :(得分:2)
我个人建议您先学习有关Java基础知识的教程。我确信您不清楚以下基本Java:
boolean b=t1.t.isAlive();
您没有将名为t1
的变量命名,但您仍尝试使用它。
编译器找不到任何名为t1
的变量,它会抱怨Cannot find symbol t1
我认为你想使用t11
。
即使您使用t11
,它仍会抱怨,因为您的班级t
中没有newthread1
作为类变量,而是在内部定义了一个局部变量构造
还尝试阅读一些Java标准,如如何声明类,命名约定等。
将来会对你有所帮助。
答案 2 :(得分:1)
第一个错误,您已将参考变量定义为t11
:
newthread1 t11=new newthread1();
因此在代码中使用t11
:
boolean b=t11.t.isAlive(); // change t1 to t11
其次,Thread t
或newthread1
类中没有定义newthread2
个实例变量。这可能会有所帮助:
class newthread1 implements Runnable{
Thread t; // make this an instance variable , currently it is local to constructor
newthread1()
{
t=new Thread(this,"FirstThread");
System.out.println("Child Thread:"+t);
t.start();
}
答案 3 :(得分:1)
要在java中创建一个线程,有two ways
1.通过实施Runnable
界面
2.扩展Thread
课程。
如果您实施Runnable
界面,则需要将Runnable
对象传递给Thread
构造的。
这样你的对象就会获得Thread行为。
如果您扩展Thread
课程,那么您需要创建Thread
扩展课程的对象。
这样你的对象就会获得Thread行为。
但是你没有遵循上述两种方式中的任何一种,
在您的代码中,语句newthread1 t11 = new newthread1();
仅创建简单对象
不是Thread object
但是您尝试在Thread
上调用导致编译错误的normal object
方法。
为避免错误,您需要遵循以上两种方式之一
更具体的你必须
用此声明替换newthread1 t11 = new newthread1();
Thread thread = new Thread(new newthread1());//first way implements Runnable
或用此声明替换class newthread1 implements Runnable{
class newthread1 extends Thread implements Runnable{//second way extends Thread
答案 4 :(得分:0)
我正在尝试使用isALive
没有这样的方法。你的意思是isAlive()
?
和join方法但它抛出的错误就像找不到符号
这是一个编译错误,可能是因为拼写错误。打印编译错误,而不是“抛出”。
请告诉我这个程序中的错误在哪里。
编译器已经这样做了,你还没有在这里发布。如果您希望其他人为您重新编译您的程序只是为了找到错误网站,我建议您可能需要等待很长时间。
以及join method的用法。我知道它是等待线程完成但我想详细说明。
详细信息可在Javadoc中找到。我可以在这里引用它,但坦率地说,当你应该已经阅读它时,我看不出这一点。如果你有什么不明白的地方,你应该在你的问题中说出来。