[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中实现多线程,主要涉及以下几个关键知识点: 1. **CWinThread类**:MFC将Windows API中...
10. **RTOS应用案例**:可能包含了实际的硬件接口操作,如LED闪烁、串口通信、液晶显示等,通过这些实例来演示多线程在实际项目中的应用。 通过学习这个示例项目,开发者不仅可以掌握STM32单片机的RT-Thread多线程...
在VB(Visual Basic)编程环境中,多线程是一种高级编程技术,它允许应用程序同时执行多个独立的任务,从而提高程序的效率和响应性。在VB中实现多线程,主要是通过`Thread`对象或者.NET Framework提供的`System....
线程是操作系统分配CPU时间的基本单元,相比单线程,多线程能够更好地利用系统资源,提高程序的响应速度和并发能力。在Java、C#、Python等语言中,都有内置的多线程支持。 多线程的工作原理主要包括以下几个方面: ...
在计算机编程领域,多线程是一种并发执行任务的技术,它允许多个任务或子任务同时在单个程序中运行。这种技术尤其在处理CPU密集型和I/O密集型任务时,能够显著提升程序的效率和响应速度。在本文中,我们将深入探讨多...
在这个“多线程多任务下载软件.zip”压缩包中,包含的是一个易语言项目的源码,可以作为学习和参考的实例。下面将详细解释多线程和多任务下载的概念,以及如何在易语言中实现这些功能。 1. **多线程技术**:在...
多线程使得一个程序可以同时执行多个任务,从而提高系统效率和响应速度。本文将深入探讨多线程编程实例及其在网络编程中的应用。 首先,理解多线程的概念是必要的。线程是操作系统分配CPU时间的基本单元,一个进程...
线程是操作系统分配CPU时间的基本单位,多线程可以提高程序的执行效率,特别是在处理大量并发任务时。在C#中,我们可以使用`Thread`类来创建新线程。以下代码创建了一个新的线程`th`,并为其分配了一个委托`...
在Java编程领域,多线程是一项至关重要的技术,它使得程序可以同时执行多个任务,从而提高了系统的效率和响应性。本书“Java多线程编程实例”深入浅出地讲解了如何在Java环境中实现多线程操作,尽管出版时间较早,但...
这个实例“实例60 多线程方式同时进行多项任务.rar”显然聚焦于如何利用多线程来并行执行不同的任务,从而提升程序的执行速度和用户体验。 首先,我们需要理解什么是多线程。线程是操作系统分配处理器时间的基本...
在VC++环境中,多线程编程是一项核心技能,它允许开发者在同一程序中同时执行多个任务,从而提升程序的效率和响应性。这个压缩包“VC++多线程编程实例及讲解”提供了关于如何在Microsoft Visual C++中实现多线程的...
在编程领域,多线程是实现并发执行任务的重要机制,特别是在现代计算机系统中,多核处理器使得多线程成为提高程序性能的关键手段。C#语言提供了丰富的多线程支持,让我们能够编写出高效的多线程应用程序。在这个"多...
多线程能够让我们充分利用多核处理器的优势,同时执行多个任务,提高程序的效率和响应性。本实例是关于VC多线程的一个具体应用,对于初学者来说是一个非常有价值的参考资料。 首先,我们要理解什么是线程。线程是...
下面,我们将深入探讨"用Delphi编写的多线程应用实例"中涉及的核心知识点。 1. **线程的结构**:线程是操作系统分配CPU时间的基本单元,每个进程至少包含一个线程。在Delphi中,我们可以使用TThread类来创建和管理...
在VC++编程环境中,多线程和进程编程是高级特性,它们允许程序并行执行不同的任务,从而提高程序效率和响应性。本资源提供的是五个关于VC++多线程和进程编程的实例,旨在帮助开发者深入理解这两个概念以及线程同步...
综上所述,“Visual C++多线程编程实例及讲解”将涵盖多线程创建、同步、通信、线程池以及调试等多个方面,通过实例来指导开发者如何有效地在Visual C++环境中进行并行编程,提高程序的运行效率。无论是初学者还是...
本实例将探讨如何在操作系统中实现多线程,特别是通过Microsoft Visual C++(VC)环境创建的三个工程:`MultiThreads_Unsynchronized`、`MutiThreadTest`和`MultiThreads_Synchronized`。 首先,我们来看`...