Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的多线程编程_Java_Multithreading - Fatal编程技术网

Java中的多线程编程

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(); } } 现在,谁

我正在学习Java中的多线程概念,遇到了一个通过实现runnable类来创建新线程的程序。以下是代码的一部分,我对此表示怀疑:

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
,它可能会在线程启动之前递归实例化无限多的线程……哇,不能说我以前遇到过自运行线程模式,我想我不喜欢它。我一眼就觉得可疑,这里已经讨论了原因:如果您只是第一次学习线程编程,您肯定应该从更基本和传统的结构开始: