Java 需要了解以下代码的场景
我有下面的一段代码Java 需要了解以下代码的场景,java,multithreading,Java,Multithreading,我有下面的一段代码 import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; public class daemonTest { public static void main(String... a) throws Exception { ExecutorService service = Executors .newSingle
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
public class daemonTest {
public static void main(String... a) throws Exception {
ExecutorService service = Executors
.newSingleThreadExecutor(new ThreadFactory() { // anonmyous class start
public Thread newThread(Runnable r) {
Thread two = new Thread(r, "two");
two.setDaemon(true);
System.out.println("two --->" + two.isDaemon());
return two;
}
});
for (int i = 0; i < 10; i++)
service.submit(new Runnable() {
@Override
public void run() {
System.out.println("[" + Thread.currentThread().getName()
+ "] - Hello World.");
Thread.yield();
}
});
service.shutdown();
}
}
请告诉我上面的代码在做什么..因为我想实现的是将一个线程设置为守护进程,然后守护进程线程将向非守护进程线程提供服务
请告知上述代码的作用
这是您的代码:
service.submit(new Runnable() {
@Override
public void run() {
System.out.println("[" + Thread.currentThread().getName()
+ "] - Hello World.");
Thread.yield();
}
});
您正在提交10个执行
println
的作业,这是一个无关的yield()
,然后立即提交。他们不等待任何线程。如果您需要它,那么您需要一个two.join()。你能更清楚地了解你真正想要的是什么吗?你看过java.util.concurrent中类的API文档了吗?-你正在创建十个线程。线程之间似乎没有区别-它们是从相同的Runnable
代码定义创建的,没有使用不同的变量初始化。代码基于我对@Gray的回答。我希望线程2被设置为守护线程,它应该为线程1提供一些服务。它可以是任何类型的服务,但最后我试图实现的是一个守护进程线程向非守护进程线程提供一些服务。如果您认为这不是正确的方法,请发布正确的代码。。!!我不明白@user1538526。你有两条线。您希望处理10个作业的一个线程。第二个线程做什么?你想在10项工作中的每一项工作中再增加一个线程吗?在为所有10个作业提供服务后,您是否要再分叉一个线程?可能我错了,请用代码建议如何解决此问题,我要实现的是将一个线程设置为守护进程,然后该守护进程线程将为非守护进程线程提供服务@用户1538526后退一步。不使用daemon这个词,请解释您试图实现的目标。1000英尺视野。你想处理一大堆工作。每个作业都需要来自另一个线程或其他什么东西的某种信息?@Gray..我只想创建两个线程并命名为A和B,然后将B线程设置为守护进程,然后线程B应该为线程A提供一些服务,如果您可以更新代码,这将使我更容易理解。
service.submit(new Runnable() {
@Override
public void run() {
System.out.println("[" + Thread.currentThread().getName()
+ "] - Hello World.");
Thread.yield();
}
});