Java Deamon线程不工作T1、T2、T3是类。我分开写。我犯了什么错误?为什么我的执事线程无法访问?
我的代码:Java Deamon线程不工作T1、T2、T3是类。我分开写。我犯了什么错误?为什么我的执事线程无法访问?,java,multithreading,Java,Multithreading,我的代码: package multithreading; public class JoinT1T2T3 extends Thread { public void run() { if(Thread.currentThread().isDaemon()) { System.out.println("Daemon thread is running");
package multithreading;
public class JoinT1T2T3 extends Thread
{
public void run()
{
if(Thread.currentThread().isDaemon())
{
System.out.println("Daemon thread is running");
}
else
{
System.out.println("Slave thread");
}
}
public static void main(String args[])
{
Thread t=new Thread();
t.setDaemon(true);
T1 thread1=new T1();
T2 thread2=new T2();
T3 thread3=new T3();
System.out.println("First Thread name is::: "+thread1.getName());
thread1.setName("XXXXXXXXXX");
System.out.println("First Thread After changing name::: "+thread1.getName());
System.out.println("First thread's id is :::"+thread1.getId());
thread1.start();
try
{
thread1.join(3000);
}
catch(Exception e)
{
System.out.println("-----------");
}
//thread2.start();
thread2.start();
thread3.start();
}
}
为什么无法访问我的守护进程?请给我一个解释和代码
T1、T2、T3是三个不同的等级。主方法也是run方法。我创建了一个新的线程实例。仍在获取“无法访问代码”。如果在run方法中{}else{},则会出现“不可访问”错误。因为在任何地方都不会调用JoinT1T2T3#run()
要达到
JoinT1T2T3#run()
为了调用run()
方法,应该在构造时使用将其包含类的对象显式传递给线程。例如:
Thread t = new Thread(new JoinT1T2T3());
现在,无论何时启动,线程t
都将调用JoinT1T2T3#run()
运行
t
即使t
是一个守护进程,它也必须像任何其他线程一样被start()
'ed,否则它将无法运行。(因此,永远不会调用JoinT1T2T3#run()
),因此您需要执行以下操作:
Thread t = new Thread(new JoinT1T2T3());
t.setDaemon(true);
t.start();
解释“守护进程”线程 一般来说,在Java中,deamon线程和非守护进程线程之间唯一的功能区别是“当运行的线程都是守护进程线程时,Java虚拟机会退出”()。除此之外,守护进程线程的行为在语法和所有方面都与非守护进程线程完全相同。它仍然必须使用
Runnable
和start()
'ed构建,就像任何其他线程一样
但是,由于当JVM退出时守护进程线程可能会突然终止,因此应谨慎使用守护进程。特别是,守护进程不应用于任何I/O或资源清理。关于finally
块和堆栈展开等内容的“正常”保证不一定适用于守护进程线程——如果JVM决定退出,所有守护进程将立即被放弃。()
Java守护程序应仅用于后台管理、簿记、度量、非关键监视等。您将收到“不可访问”错误,因为JoinT1T2T3#run()
从未在任何地方调用
要达到JoinT1T2T3#run()
为了调用run()
方法,应该在构造时使用将其包含类的对象显式传递给线程。例如:
Thread t = new Thread(new JoinT1T2T3());
现在,无论何时启动,线程t
都将调用JoinT1T2T3#run()
运行t
即使t
是一个守护进程,它也必须像任何其他线程一样被start()
'ed,否则它将无法运行。(因此,永远不会调用JoinT1T2T3#run()
),因此您需要执行以下操作:
Thread t = new Thread(new JoinT1T2T3());
t.setDaemon(true);
t.start();
解释“守护进程”线程
一般来说,在Java中,deamon线程和非守护进程线程之间唯一的功能区别是“当运行的线程都是守护进程线程时,Java虚拟机会退出”()。除此之外,守护进程线程的行为在语法和所有方面都与非守护进程线程完全相同。它仍然必须使用Runnable
和start()
'ed构建,就像任何其他线程一样
但是,由于当JVM退出时守护进程线程可能会突然终止,因此应谨慎使用守护进程。特别是,守护进程不应用于任何I/O或资源清理。关于finally
块和堆栈展开等内容的“正常”保证不一定适用于守护进程线程——如果JVM决定退出,所有守护进程将立即被放弃。()
Java守护程序应仅用于后台管理、簿记、度量、非关键监视等。您从未调用过t.start()。线程从未启动。此外,您还必须扩展线程或为t.start()提供一个可运行实例。“为什么我的deamon不可运行,请提供代码解释。”您能解释一下您的意思吗?您好Peter Lawrey,我在问为什么run()方法中的sop没有打印到控制台?我应该做什么来测试执事线程是如何工作的。如果你能给我一个简单的例子来说明deamon线程是如何工作的,或者一个描述deamon线程行为的代码,我将不胜感激。谢谢。您从未给t.start()打过电话。线程从未启动。此外,您还必须扩展线程或为t.start()提供一个可运行实例。“为什么我的deamon不可运行,请提供代码解释。”您能解释一下您的意思吗?您好Peter Lawrey,我在问为什么run()方法中的sop没有打印到控制台?我应该做什么来测试执事线程是如何工作的。如果你能给我一个简单的例子来说明deamon线程是如何工作的,或者一个描述deamon线程行为的代码,我将不胜感激。非常感谢。