关于线程池的一些疑惑,望大侠给予解答!!!!!

问题描述

假如说,我有大量的循环操作需要执行,我开启了线程池,我应该如何使用这个线程池来执行我的操作voidstart(){for(inti=0;i<a.Count;i++){stringb=a[i].ToString();ThreadPool.QueueUserWorkItem(newWaitCallback(DoWork),b);}}staticvoidDoWork(objectstate){//执行我的操作}

我的a的count有很多,我这种写法对么,还是只应该调用一次ThreadPool.QueueUserWorkItem(newWaitCallback(DoWork),b)循环操作应该放在DoWork的方法里,怎么写才是真的让线程池来分线程工作?

解决方案

解决方案二:
这么奢侈?开这么多线程池?你是要干嘛····这样改改:voidstart(){ThreadPool.QueueUserWorkItem(newWaitCallback(DoWork),);staticvoidDoWork(objectstate){//执行我的操作for(inti=0;i<a.Count;i++){stringb=a[i].ToString();//TODO:}}}

解决方案三:
引用1楼yuekunge的回复:

这么奢侈?开这么多线程池?你是要干嘛····这样改改:[/code]

voidstart(){ThreadPool.QueueUserWorkItem(newWaitCallback(DoWork));}staticvoidDoWork(objectstate){//执行我的操作for(inti=0;i<a.Count;i++){stringb=a[i].ToString();//TODO:}}
解决方案四:
楼主的代码是对的,那个是把线程加入线程池
解决方案五:
额,楼上的两位,给出的答案正好相反啊。。。。到底哪个是对的?
解决方案六:
额,到底怎样写才是对的啊。。。。
解决方案七:
为什么我无论用哪种方法,都没有感觉有速度的提升呢?
解决方案八:
首先确保开多个线程能确实解决你的问题的前提下建议开和cpu核数量差不多线程即可所有任务一次性放进线程池,那只是避免阻塞主线程,并没有提高效率每个任务分开放进线程池,任务量大的情况,会导致线程池资源紧缺,出现任务排队,大量线程导致cpu上下文切换也会消耗时间所以开若干线程平均分配任务即可,可以根据实际情况调整线程个数
解决方案九:
引用7楼newxdlysk的回复:

首先确保开多个线程能确实解决你的问题的前提下建议开和cpu核数量差不多线程即可所有任务一次性放进线程池,那只是避免阻塞主线程,并没有提高效率每个任务分开放进线程池,任务量大的情况,会导致线程池资源紧缺,出现任务排队,大量线程导致cpu上下文切换也会消耗时间所以开若干线程平均分配任务即可,可以根据实际情况调整线程个数

你的意思是不需要用线程池,而是自己来控制新建线程么,因为线程池我无法控制线程池里有多少个线程在跑我的方法
解决方案十:
首先,需要确定你的任务到底是操作IO还是操作内存如果是操作IO,外部设备比CPU慢的太多,CPU会有很多等待的时间,利用等待的时间切换到其他线程,是可以很大的提高效率的而如果是内存操作,CPU与内存的交流速度非常快,跟CPU本身的执行基本一致,CPU一直在忙碌,你让它来回切换线程,反而降低效率
解决方案十一:
操作IO,包括硬盘,串口,以太网,等等操作内存,包括赋值,计算,实例化内存对象等等
解决方案十二:
引用楼主generhappy的回复:

假如说,我有大量的循环操作需要执行,我开启了线程池,我应该如何使用这个线程池来执行我的操作voidstart(){for(inti=0;i<a.Count;i++){stringb=a[i].ToString();ThreadPool.QueueUserWorkItem(newWaitCallback(DoWork),b);}}staticvoidDoWork(objectstate){//执行我的操作}

我的a的count有很多,我这种写法对么,还是只应该调用一次ThreadPool.QueueUserWorkItem(newWaitCallback(DoWork),b)循环操作应该放在DoWork的方法里,怎么写才是真的让线程池来分线程工作?

这样写一点问题也没有。但是问题是,你打算用它执行什么呢?最好每一次都举出一个实际的例子。真正好的程序设计师,花精力放在“实际例子(实际需求)上”,而不是为了技术而拼凑技术。
解决方案十三:
引用6楼generhappy的回复:

为什么我无论用哪种方法,都没有感觉有速度的提升呢?

谁告诉线程就一定提高速度,而不是降低速度?你提不出具体实际的例子,空谈技术,谁能知道为什么速度没有提升呢?

时间: 2024-07-28 22:17:12

关于线程池的一些疑惑,望大侠给予解答!!!!!的相关文章

spring线程池-java线程,spring 线程池

问题描述 java线程,spring 线程池 大家好: 我现在有几个疑惑的地方 1.如果使用spring 线程池,或者java自带的线程池,那应用程序中的所有线程都 受到创建的这个线程池管理,还是只通过线程池.execute加进去的才被管理. 2.spring MVC 线程池threadPoolTaskExecutor 配置了最少活跃线程10个,最大10个, 那如果线程池中已经有10个活跃的线程在执行,如果继续往线程池中execute,此时的线程 是出于等待,还是直接挂掉,这个spring的线程

Node.js事件循环(Event Loop)和线程池详解_node.js

Node的"事件循环"(Event Loop)是它能够处理大并发.高吞吐量的核心.这是最神奇的地方,据此Node.js基本上可以理解成"单线程",同时还允许在后台处理任意的操作.这篇文章将阐明事件循环是如何工作的,你也可以感受到它的神奇. 事件驱动编程 理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互,所以使用基于事件

java concurrent包自带线程池和队列详细讲解

Java线程池使用说明一简介线程的使用在java中占有极其重要的地位,在jdk1.4极其之前的jdk版本中,关于线程池的使用是极其简陋的.在jdk1.5之后这一情况有了很大的改观.Jdk1.5之后加入了java.util.concurrent包,这个包中主要介绍java中线程以及线程池的使用.为我们在开发中处理线程的问题提供了非常大的帮助.二:线程池线程池的作用:线程池作用就是限制系统中执行线程的数量.     根据系统的环境情况,可以自动或手动设置线程数量,达到运行的最佳效果:少了浪费了系统资

Java线程池架构原理和源码解析(ThreadPoolExecutor)

在前面介绍JUC的文章中,提到了关于线程池Execotors的创建介绍,在文章:<java之JUC系列-外部Tools>中第一部分有详细的说明,请参阅: 文章中其实说明了外部的使用方式,但是没有说内部是如何实现的,为了加深对实现的理解,在使用中可以放心,我们这里将做源码解析以及反馈到原理上,Executors工具可以创建普通的线程池以及schedule调度任务的调度池,其实两者实现上还是有一些区别,但是理解了ThreadPoolExecutor,在看ScheduledThreadPoolExe

Java线程池 ExecutorService

本篇主要涉及到的是java.util.concurrent包中的ExecutorService.ExecutorService就是Java中对线程池的实现. 一.ExecutorService介绍 ExecutorService是Java中对线程池定义的一个接口,它java.util.concurrent包中,在这个接口中定义了和后台任务执行相关的方法: Java API对ExecutorService接口的实现有两个,所以这两个即是Java线程池具体实现类(详细了解这两个实现类,点击这里):

定制并发类(六)自定义在计划的线程池内运行的任务

声明:本文是< Java 7 Concurrency Cookbook>的第七章, 作者: Javier Fernández González 译者:郑玉婷 自定义在计划的线程池内运行的任务 计划的线程池是 Executor 框架的基本线程池的扩展,允许你定制一个计划来执行一段时间后需要被执行的任务. 它通过 ScheduledThreadPoolExecutor 类来实现,并允许运行以下这两种任务: Delayed 任务:这种任务在一段时间后仅执行一次. Periodic 任务:这种任务在延

Java多线程和线程池

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 1.为什么要使用线程池 在Java中,如果每个请求到达就创建一个新线程,开销是相当大的.在实际使用中,服务器在创建和销毁线程上花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多.除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源.如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或"切换过度"而导致系统资源不足.为了防止资源

Java基础-创建Java程序中的线程池

程序|创建 线程是Java的一大特性,它可以是给定的指令序列.给定的方法中定义的变量或者一些共享数据(类一级的变量).在Java中每个线程有自己的堆栈和程序计数器(PC),其中堆栈是用来跟踪线程的上下文(上下文是当线程执行到某处时,当前的局部变量的值),而程序计数器则用来跟踪当前线程正在执行的指令. 在通常情况下,一个线程不能访问另外一个线程的堆栈变量,而且这个线程必须处于如下状态之一: 1.排队状态(Ready),在用户创建了一个线程以后,这个线程不会立即运行.当线程中的方法start()被调

Java游戏起步:(一)线程与线程池

任何游戏都至少需要运行两个线程,主线程和GUI线程而线程池是一个管理运行线程的有用工具,下面的代码示范了一个线程池的实现方法~~************************************************(ThreadPool.java)import java.util.LinkedList; /** 线程池是一组线程,限制执行任务的线程数*/public class ThreadPool extends ThreadGroup { private boolean isAli