`

[转]多线程任务分配实例

阅读更多
[url]http://www.iteye.com/problems/100706
[/url]
package com.lj.thread;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

public class BasicTest
{
	
	public static void main(String[] args) throws InterruptedException, ExecutionException
	{
		List<String>list=new ArrayList<String>();
		
		for(int i=0;i<100;i++){
			list.add(i+",");
		}
		
		System.out.println(new BasicTest().list2Str(list, 5));
	}
	
	
	public String list2Str(List<String>list,final int nThreads) throws InterruptedException, ExecutionException{
		if(list==null||list.isEmpty()){
			return null;
			
		}
		
		
		StringBuffer ret=new StringBuffer();
		
		int size=list.size();
		
		ExecutorService executorService=Executors.newFixedThreadPool(nThreads);
		
		List<Future<String>> futures=new ArrayList<Future<String>>();
		
		for(int i=0;i<nThreads;i++){
			final List<String> subList=list.subList(size/nThreads*i, size/nThreads*(i+1));
			Callable<String>task=new Callable<String>(){

				@Override
				public String call() throws Exception
				{
					StringBuffer sb=new StringBuffer();
					for(String str:subList){
						sb.append(str);
					}
					
					return sb.toString();
				}
				
			};
			
			futures.add(executorService.submit(task));
		}
		
		
		for(Future<String>future:futures){
			System.out.println("Future<String>future:futures");
			ret.append(future.get());
		}
		
		executorService.shutdown();
		
		return ret.toString();
		
	}
}

这里Future<String>里的String就是返回类型。

可以改成任意其他类型如Future<List<Object>>






================================================

2014-07-21 更新:


package com.lj.socket;

import java.util.ArrayList;
import java.util.List;

public class Test02
{
	public static void main(String[] args)
	{
		List<String> all = new ArrayList<String>();
		all.add("h");
		all.add("w");
		all.add("c");
		all.add("2");
		all.add("x");

		int nthread = 2;

		System.out.println(all.size());
		int size = all.size();
 

		for (int i = 0; i < nthread; i++)
		{
			System.out.println(i);
			if (i + 1 == nthread)
			{
				System.out.println("hello");
				List<String> lastSub=all.subList(size/nthread*i, all.size());
				System.out.println("lastSub="+lastSub);
			} else
			{
				List<String> sub = all.subList(size / nthread * i, size / nthread * (i + 1));
				System.out.println("sub=" + sub);
			}
		}

	}
}





这个程序有个问题,就是最后一个sublist可能会无法包含到最终的数据。
而上面的代码修复了这个问题。
分享到:
评论

相关推荐

    多线程的入门 实例源码

    在编程领域,多线程是实现并发执行任务的关键技术,尤其在现代计算机系统中,它能够充分利用多核处理器的能力,提高程序的运行效率。本文将深入探讨多线程的入门知识,并结合实例源码进行详细解析。 首先,理解什么...

    多线程教程+实例讲解

    在编程领域,多线程是实现并发执行任务的关键技术,尤其在现代计算机系统中,它能够充分利用硬件资源,提高程序的执行效率。本教程将深入浅出地介绍多线程的概念、原理及其在实际开发中的应用。 一、多线程基础 1. ...

    多线程执行任务具体实现

    在计算机科学中,多线程是一种程序设计技术,它允许应用程序同时执行多个不同的任务或子任务,从而提高系统的效率和响应速度。多线程在Java、C++、Python等编程语言中都有广泛的应用。本篇文章将深入探讨多线程执行...

    多线程实例(MFC)VS2010版本

    多线程编程是现代软件开发中的一个重要概念,它允许程序同时执行多个任务,提高了系统资源的利用率和程序的响应速度。 在MFC中实现多线程,主要涉及以下几个关键知识点: 1. **CWinThread类**:MFC将Windows API中...

    stm32单片机多线程实例

    10. **RTOS应用案例**:可能包含了实际的硬件接口操作,如LED闪烁、串口通信、液晶显示等,通过这些实例来演示多线程在实际项目中的应用。 通过学习这个示例项目,开发者不仅可以掌握STM32单片机的RT-Thread多线程...

    VB 多线程实例

    在VB(Visual Basic)编程环境中,多线程是一种高级编程技术,它允许应用程序同时执行多个独立的任务,从而提高程序的效率和响应性。在VB中实现多线程,主要是通过`Thread`对象或者.NET Framework提供的`System....

    多线程详细讲解与实例

    线程是操作系统分配CPU时间的基本单元,相比单线程,多线程能够更好地利用系统资源,提高程序的响应速度和并发能力。在Java、C#、Python等语言中,都有内置的多线程支持。 多线程的工作原理主要包括以下几个方面: ...

    多线程实例,线程实例

    在计算机编程领域,多线程是一种并发执行任务的技术,它允许多个任务或子任务同时在单个程序中运行。这种技术尤其在处理CPU密集型和I/O密集型任务时,能够显著提升程序的效率和响应速度。在本文中,我们将深入探讨多...

    多线程多任务下载软件.zip易语言项目例子源码下载

    在这个“多线程多任务下载软件.zip”压缩包中,包含的是一个易语言项目的源码,可以作为学习和参考的实例。下面将详细解释多线程和多任务下载的概念,以及如何在易语言中实现这些功能。 1. **多线程技术**:在...

    多线程编程实例适合网络编程人员

    多线程使得一个程序可以同时执行多个任务,从而提高系统效率和响应速度。本文将深入探讨多线程编程实例及其在网络编程中的应用。 首先,理解多线程的概念是必要的。线程是操作系统分配CPU时间的基本单元,一个进程...

    C#队列Queue多线程用法实例

    线程是操作系统分配CPU时间的基本单位,多线程可以提高程序的执行效率,特别是在处理大量并发任务时。在C#中,我们可以使用`Thread`类来创建新线程。以下代码创建了一个新的线程`th`,并为其分配了一个委托`...

    Java多线程编程实例

    在Java编程领域,多线程是一项至关重要的技术,它使得程序可以同时执行多个任务,从而提高了系统的效率和响应性。本书“Java多线程编程实例”深入浅出地讲解了如何在Java环境中实现多线程操作,尽管出版时间较早,但...

    实例60 多线程方式同时进行多项任务.rar_多线程多任务

    这个实例“实例60 多线程方式同时进行多项任务.rar”显然聚焦于如何利用多线程来并行执行不同的任务,从而提升程序的执行速度和用户体验。 首先,我们需要理解什么是多线程。线程是操作系统分配处理器时间的基本...

    VC++多线程编程 实例及讲解

    在VC++环境中,多线程编程是一项核心技能,它允许开发者在同一程序中同时执行多个任务,从而提升程序的效率和响应性。这个压缩包“VC++多线程编程实例及讲解”提供了关于如何在Microsoft Visual C++中实现多线程的...

    C#多线程互斥实例 多线程获取同一变量

    在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...

    VC多线程实例源码 实例

    多线程能够让我们充分利用多核处理器的优势,同时执行多个任务,提高程序的效率和响应性。本实例是关于VC多线程的一个具体应用,对于初学者来说是一个非常有价值的参考资料。 首先,我们要理解什么是线程。线程是...

    用Delphi编写的多线程应用实例

    下面,我们将深入探讨"用Delphi编写的多线程应用实例"中涉及的核心知识点。 1. **线程的结构**:线程是操作系统分配CPU时间的基本单元,每个进程至少包含一个线程。在Delphi中,我们可以使用TThread类来创建和管理...

    VC++多线程/进程编程实例(2)(5个实例-附源代码)

    在VC++编程环境中,多线程和进程编程是高级特性,它们允许程序并行执行不同的任务,从而提高程序效率和响应性。本资源提供的是五个关于VC++多线程和进程编程的实例,旨在帮助开发者深入理解这两个概念以及线程同步...

    Visual C++多线程编程实例及讲解.

    综上所述,“Visual C++多线程编程实例及讲解”将涵盖多线程创建、同步、通信、线程池以及调试等多个方面,通过实例来指导开发者如何有效地在Visual C++环境中进行并行编程,提高程序的运行效率。无论是初学者还是...

    多线程编程的简单实例

    本实例将探讨如何在操作系统中实现多线程,特别是通过Microsoft Visual C++(VC)环境创建的三个工程:`MultiThreads_Unsynchronized`、`MutiThreadTest`和`MultiThreads_Synchronized`。 首先,我们来看`...

Global site tag (gtag.js) - Google Analytics