关于为非守护程序线程提供一些服务的守护程序线程

我有一个查询,我已经开发了一个名为thread one和thread two的多个线程下面的代码,下面是代码..

class 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(); } } 

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

问题是守护程序线程如何为非守护程序线程提供服务

我会使用执行器服务。 如果要从守护程序线程返回值,可以使用Callable而不是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个任务添加到队列中,以便执行程序线程执行。

最后它在完成服务后停止服务(这很少需要)

例如,使t1成为守护进程:

 Thread t1 = new Thread(obj); t1.setName("one"); t1.setDaemon(true); t1.start(); 

注意:

  • 需要在线程启动之前调用setDaemon
  • t1.currentThread().setName("one"); 绝对不会做你想要的。 它将主线程的名称设置为“one”,而不是t1的名称。 请参阅上面的代码,了解您的意思。
  • 可以在线程的javadoc中轻松找到这些信息,这应该是您在搜索该类信息时首先看到的信息。