【问题标题】:Manage threads using threadpool使用线程池管理线程
【发布时间】:2013-06-18 09:52:04
【问题描述】:

在C#中,我们可以如下创建线程

    System.Threading.Thread thd1 = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
    thd1.Start();
    System.Threading.Thread thd2 = new System.Threading.Thread(new System.Threading.ThreadStart(DoWork));
    thd2.Start();
    thd1.Join();
    thd2.Join();

如果不使用上面的语句,我们如何使用 ThreadPool 类似地管理线程?

【问题讨论】:

  • 是C#相关的问题吗?
  • 是的。它是在 c# 中完成的。它可能有许多程序并行运行;所以如果可能的话,我想使用线程池而不是管理单个线程。
  • 那么,使用 ThreadPool 类,QueueUserWorkItem 方法。或者更有效的是,使用 Task 或 BackgroundWorker 类。否则非常不清楚您要“管理”什么。
  • 谢谢。但是如果我调用 QueueUserWorkItem 方法,线程将如何启动?我们如何指定优先级、加入等?线程会自行启动和加入吗?
  • 线程“启动”是因为 QueueUserWorkItem() 调用向它们发出信号。永远循环等待操作的线程不需要 Join()。优先事项?如果您需要排队的任务具有不同的优先级,我不确定 BlockingCollection 中是否有可用的优先级阻塞队列 - 您可能必须滚动自己的线程池才能做到这一点。

标签: c# multithreading threadpool


【解决方案1】:

Java 中有很多选项可以使用 ThreadPoolExecutor,这只是其中之一

private ExecutorService executorService = Executors.newCachedThreadPool();
...
executorService.execute(new Runnable() {
  @Override
  public void run() {
     ...
  }
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    • 2013-11-28
    • 2021-05-10
    • 2011-11-23
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多