【问题标题】:Need to understand the scenario for below piece of code需要了解以下代码的场景
【发布时间】:2012-07-26 14:31:59
【问题描述】:

我有以下代码..

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

结果的输出是……

two --->true
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.
[two] - Hello World.

请告知上面这段代码在做什么..因为我想要实现的是将一个线程设置为守护进程,然后该守护线程将为非守护线程提供服务!!

【问题讨论】:

  • 嗯,它看起来已经在做你想做的事了。你能更清楚你真正要问的是什么吗?
  • 您是否查看过 java.util.concurrent 中的类的 API 文档?-
  • 您正在创建十个线程。线程之间似乎没有区别 - 它们是根据 Runnable 代码的相同定义创建的,并且没有使用不同的变量进行初始化。
  • 代码基于我对stackoverflow.com/questions/11665729/…的回答

标签: java multithreading


【解决方案1】:

请告知上面的代码在做什么..

这是你的代码:

        service.submit(new Runnable() {
            @Override
            public void run() {
                System.out.println("[" + Thread.currentThread().getName()
                        + "] - Hello World.");
                Thread.yield();
            }
        });

您正在提交 10 个工作,它们执行 println,一个无关紧要的 yield(),然后立即提交。他们不等待任何线程。如果你需要它,那么你需要一个 two.join() 在你的 runnable 中的某个地方。

【讨论】:

  • @Gray..我希望将线程二设置为守护线程,它应该为线程一提供一些服务,它可以是任何类型的服务,但最后我想要实现的是一个守护进程线程为非守护线程提供一些服务。如果您认为这不是正确的方法,请发布正确的代码..!!
  • 我不明白@user1538526。你有2个线程。您要处理 10 个作业的一个线程。第二个线程是做什么的?你想在你的 10 个工作中都创建另一个线程吗?为所有 10 个作业提供服务后,您是否要分叉另一个线程?
  • 我可能是错的,那么请用代码来建议你如何解决这个问题,我想要实现的是将一个线程设置为守护进程,然后守护线程会为非守护线程提供服务!!
  • @user1538526 退后一步。在不使用守护进程一词的情况下解释您要实现的目标。请看1000英尺。你想处理一堆工作。每个作业都需要来自其他线程或其他什么的某种信息?
  • @Gray..我只是想创建两个线程并命名为 A 和 B ,然后将 B 线程设置为守护进程,然后线程 B 应该为线程 A 提供一些服务,如果可以请更新让我更容易理解的代码。
猜你喜欢
  • 2012-07-06
  • 2015-08-08
  • 2014-05-01
  • 2016-06-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-21
  • 1970-01-01
  • 2019-05-04
相关资源
最近更新 更多