至于守护线程提供非守护线程一些服务(Regarding daemon thread providin

2019-06-26 13:01发布

我有一个我已经开发了以下多个线程的代码命名的一个线程和线程两个一个查询,下面是代码..

类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();

    }

}

现在我想线程两个来设置为守护线程,它应该提供一些服务线程一个它可以是任何类型的服务,但最后我是想实现的是守护线程提供非守护线程的一些服务。 请指教如何实现这一信息。问题是有关的守护线程将如何提供服务,以非守护线程..?

Answer 1:

现在的问题是有关的守护线程将如何提供服务,以非守护线程

我会用一个执行者的服务。 如果你想从守护线程返回一个值,你可以使用一个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个任务的队列中执行人螺纹(一个或多个)来执行。

最后,它停止时,它已经完成了它的服务(这是很少用到)



Answer 2:

为了使t1例如守护进程:

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

注意:

  • setDaemon需要线程启动之前调用
  • t1.currentThread().setName("one"); 肯定不会做你想要的。 它集主线程“一”,T1的不是名称的名称。 见上面你可能是指我的代码。
  • 信息可以很容易地在找到主题的javadoc的应该是你看,当你搜索这方面的信息在第一的位置。


文章来源: Regarding daemon thread providing some service to non daemon thread