Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于守护进程线程向非守护进程线程提供某些服务_Java_Multithreading_Threadpool - Fatal编程技术网

Java 关于守护进程线程向非守护进程线程提供某些服务

Java 关于守护进程线程向非守护进程线程提供某些服务,java,multithreading,threadpool,Java,Multithreading,Threadpool,我有一个问题,就是我开发了一个代码,下面有多个线程,名为线程一和线程二,下面是代码 类multi实现可运行{ public void run() { for (int i = 0; i < 20; i++) { try { Thread.sleep(500); System.out.println(Thread.currentThread().getName()); System.o

我有一个问题,就是我开发了一个代码,下面有多个线程,名为线程一和线程二,下面是代码

类multi实现可运行{

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

    }

}
public void run(){
对于(int i=0;i<20;i++){
试一试{
睡眠(500);
System.out.println(Thread.currentThread().getName());
系统输出打印号(“i”);
}捕捉(中断异常e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
}
公共类多线程3{
公共静态void main(字符串…a){
multi-obj=新的multi();
螺纹t1=新螺纹(obj);
t1.currentThread().setName(“一”);
t1.start();
螺纹t2=新螺纹(obj);
t2.currentThread().setName(“两个”);
t2.start();
}
}

现在我想将线程2设置为守护线程,它应该为线程1提供一些服务,它可以是任何类型的服务,但最后我试图实现的是,一个守护线程为非守护线程提供一些服务。请建议如何实现这一点。问题是守护进程线程将如何向非守护进程线程提供服务。

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

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

  • setDaemon
    需要在线程启动之前调用
  • t1.currentThread().setName(“一”)
    绝大多数情况下都不能满足您的要求。它将主线程的名称设置为“一”,而不是t1的名称。请参阅上面的代码,了解您可能的意思
  • 这些信息可以很容易地在中找到,当您搜索此类信息时,应该首先查看这些信息

问题是守护进程线程如何向非守护进程线程提供服务

我会使用遗嘱执行人服务。如果要从守护进程线程返回值,可以使用
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();
首先,它创建一个带有工作队列的线程池。线程池有一个创建线程的因子,在本例中,该因子具有一个给定的名称,即守护进程

其次,有一个循环向队列中添加10个任务,供执行者线程执行


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

请大家对此提出建议。Ummm
t2.setDaemon(true)我遗漏了什么吗?问题是守护进程线程将如何向非守护进程线程提供服务。问题是守护进程线程将如何向非守护进程线程提供服务。@user1538526守护进程线程只是一个线程-唯一的区别是JVM不会等到守护进程线程完成时才启动出口。因此,您可以让守护进程线程以与让非守护进程线程运行相同任务相同的方式执行任务。@assylias有时真正的问题并不明显。;)@peter Aweasome man,你能在我通过executor service时完整地发布更新后的代码吗?提前谢谢。@peter你能解释一下你发布的上述代码是怎么回事吗?我已经部分理解了Yok,补充了一个解释。如果您有特定的问题,请告诉我。@Peter但是它为非守护进程线程提供了什么服务,在代码中是这样的。。!!
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.