Java中的多线程编程
我正在学习Java中的多线程概念,遇到了一个通过实现runnable类来创建新线程的程序。以下是代码的一部分,我对此表示怀疑:Java中的多线程编程,java,multithreading,Java,Multithreading,我正在学习Java中的多线程概念,遇到了一个通过实现runnable类来创建新线程的程序。以下是代码的一部分,我对此表示怀疑: class Demo implements Runnable { Thread t; Demo() { t=new Thread(this,"child_thread1"); System.out.println("Thread Info:"+t); t.start(); } } 现在,谁
class Demo implements Runnable
{
Thread t;
Demo()
{
t=new Thread(this,"child_thread1");
System.out.println("Thread Info:"+t);
t.start();
}
}
现在,谁能给我解释一下这个的用途吗?我没有传递this
而是尝试传递Demo
类的对象。原来child\u thread1
甚至没有运行 ”:-
此关键字可用于引用当前类实例变量
此()可用于调用当前类构造函数
此关键字可用于调用当前类方法(隐式)
这可以在方法调用中作为参数传递
这可以在构造函数调用中作为参数传递
此关键字还可用于返回当前类实例
这里的“this”表示线程/可运行的对象。由于Demo类是继承的,可运行接口Demo类可以被视为线程。因此,当我们调用't.start()'时,解析指向当前对象的关键字'this',它将在新线程中执行run()方法。当然,您也可以解析新的演示对象,但可以使用不同的构造函数创建该对象,因为否则,当我们创建演示对象时,它将在循环中调用构造函数
public class Demo implements Runnable{
Thread t1,t2;
public Demo(){
//Create Child 1 with First constructor
t1=new Thread(new Demo(true),"Child-1");
System.out.println("Thread Info:"+t1);
t1.start();
//Create Child 2 with Second constructor
t2=new Thread(new Demo(1),"Child-2");
System.out.println("Thread Info:"+t2);
t2.start();
}
public Demo(boolean b){
t1=new Thread();
t2=new Thread();
}
public Demo(int i){
t1=new Thread("Constructor 2"){
@Override
public void run() {
System.out.println("Internal Thread "+Thread.currentThread().getName());
}
};
t1.start();
}
@Override
public void run() {
//Work goes Here/
System.out.println("Thread Works :"+Thread.currentThread().getName());
}
/**/
public static void main(String[] args) {
//Default Constructor
Demo demo=new Demo();
}
}
这里,当我们调用第二个构造函数时,将通过“Child-2”线程调用“constructor-2”命名线程。
这是对当前实例的引用,当前实例是可运行的
,线程可以调用它(线程代码)已经在Demo
类的对象中,可以通过this
访问该类。上面的两个注释比下面的两个答案都好:)如果您传递的是Demo
的一个新实例而不是this
,它可能会在线程启动之前递归实例化无限多的线程……哇,不能说我以前遇到过自运行线程模式,我想我不喜欢它。我一眼就觉得可疑,这里已经讨论了原因:如果您只是第一次学习线程编程,您肯定应该从更基本和传统的结构开始: