gpt4 book ai didi

java - 关于守护线程为非守护线程提供一些服务

转载 作者:行者123 更新时间:2023-12-02 07:40:34 27 4
gpt4 key购买 nike

我有一个查询,即我开发了下面的多线程代码,名为线程一和线程二,下面是代码..

类 multip 实现 Runnable {

public void run() {
for (int i = 0; i < 20; i++) {
try {


Thread.sleep(500);
System.out.println(Thread.currentThread().getName());
System.out.println("i");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

public class MultiThread3 {
public static void main(String... a) {
multip obj = new multip();
Thread t1 = new Thread(obj);
t1.currentThread().setName("one");
t1.start();
Thread t2 = new Thread(obj);
t2.currentThread().setName("two");
t2.start();

}

}

现在我希望线程二设置为守护线程,它应该为线程一提供一些服务,它可以是任何类型的服务,但最后我想要实现的是一个守护线程为非守护线程提供一些服务。请告知如何实现这一点。问题是关于守护线程如何向非守护线程提供服务..?

最佳答案

The question is about of how the daemon thread will provide the service to non daemon thread

我会使用执行者服务。如果你想从守护线程返回一个值,你可以使用 Callable<ReturnType>而不是Runnable .

// creating a thread pool.
ExecutorService service = Executors.newSingleThreadExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
// creating a thread.
Thread two = new Thread(r, "two");
// making it a daemon thread.
two.setDaemon(true);
return two;
}
});

for(int i=0;i<10;i++)
// creating a task and submitting it.
service.submit(new Runnable() {
@Override
public void run() {
System.out.println("["+Thread.currentThread().getName()+"] - Hello World.");
Thread.yield();
}
});
service.shutdown();

打印

[two] - Hello World.
[two] - Hello World.
[two] - Hello World.

首先它创建一个带有工作队列的线程池。线程池有一个创建线程的因素,在本例中具有给定名称,即守护进程。

其次,有一个循环将 10 个任务添加到队列中以供执行程序线程执行。

最后,当服务完成时,它会停止服务(这很少需要)

关于java - 关于守护线程为非守护线程提供一些服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11665729/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com