java我有一个List想传入多线程的run方法?怎么传?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java我有一个List想传入多线程的run方法?怎么传?相关的知识,希望对你有一定的参考价值。
new thread().start();就运行了 怎么传进去
list里面包含的是多个实体 这个实体都要处理一个方法 那个方法时间耗时长 run方法怎么写可以不用处理完就执行下一个?
假如你的list是在类A中的。而你要出入到的线程为类B,
那么你就在类A那里,定义一个synchronized的方法,getNextElementForList(),里面返回list中的对象。
再 new Thread(new B(this)).start()即可。
补充下,上面的语句在类A中执行,而且类B是实现Runnable接口的。
给你一个类似的类来参考下吧:
import java.io.File;import java.util.ArrayList;
public class ThreadDemo
public static void main(String args[])
int threadQuantity=3;
Handle h=new Handle();
h.initList();
h.handle(threadQuantity);
class Handle
private String fileName="C://";
private int next=-1;
private int threadNo=0;
private ArrayList<File> list=new ArrayList<File>();
public Handle(String path)
fileName=path;
public Handle()
public void setPath(String path)
fileName=path;
public void initList()
next=-1;
threadNo=0;
File f=new File(fileName);
list=new ArrayList<File>();
if(f.isDirectory())
File[] fs=f.listFiles();
for(File e:fs)
list.add(e);
else
list.add(f);
public synchronized File getNextFile()
next++;
if(next>=list.size())
threadNo++;
System.out.println(threadNo+"个线程处理完毕");
return null;
return list.get(next);
public void handle(int threadQuantity)
for(int i=0;i<threadQuantity;i++)
new Thread(new ThreadHandle(this)).start();
class ThreadHandle implements Runnable
private Handle handle;
public ThreadHandle(Handle handle)
this.handle=handle;
@Override
public void run()
// TODO Auto-generated method stub
while(true)
File f=handle.getNextFile();
if(null==f) break;
whatYouDo(f);
private void whatYouDo(File f)
System.out.println("file name is "+f.getName()+" and it is"+(f.isDirectory()?" ":" not ")+"Directory");
参考技术A public class Demo
public static void main(String[] args)
List<Object> list = new ArrayList<Object>();
for (Object obj : list)
new Thread(new A(obj)).start();
class A implements Runnable
private Object obj;
public A(Object obj)
this.obj = obj;
@Override
public void run()
//调用obj的方法
当然,效率非常低。楼主可以传多个对象进去,让一个线程调用多个方法。
多线程速度比较慢,能用单线程就尽量用单线程。
追问我现在要把数据全部生产excel文件 现在单线程的话一个文件要1秒 要循环生产40多个就很慢了 多线程应该要快些吧!
追答多线程只是在宏观上同时执行,其实一个cpu每次只能执行一个任务,多任务时cpu就要不停的切换。多线程会让操作系统分给程序更多的时间片来执行代码,线程一多,线程之间的切换也需要时间。造成操作系统整体性能,而你的程序自然执行也慢点。
追问意思是我现在单线程的话可能要40秒,用了多线程的话可能时间会更多??或者说效率上还是得不到提升?那这个怎么去提升啊 生成excel文件太慢了
追答数据太多,只能从算法上优化了。要不你换执行速度更高的语言试试。你是用什么框架生成excel文件吧。
追问jxl 代码不知道咋个优化了 感觉上差不多了 已经 没地方可优化了 分析的那些代码都已经改了很多次了 数据量也不是很大 就是不知道为什么这么慢
追答文件读写当然很慢啊。上次合并数据库的执行了,执行了将近一个小时。
本回答被提问者采纳 参考技术B 方法有很多种最简单的就是使用静态变量。
如果线程耗时较长且不用等待线程运行完毕的话,直接另起一个线程就可以了。追问
传值能说具体点嘛?我不是很了解多线程 谢谢。。。
追答new thread1().run();
new thread2().run();
new thread3().run();
new thread4().run();
new thread....().run();
以上是关于java我有一个List想传入多线程的run方法?怎么传?的主要内容,如果未能解决你的问题,请参考以下文章