问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

java我有一个List想传入多线程的run方法?怎么传?

提问网友 发布时间:2023-10-20 06:37
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
3个回答
热心网友 回答时间:2024-05-17 20:45

假如你的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");
}

}

热心网友 回答时间:2024-05-17 20:46
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的方法
}
}

当然,效率非常低。楼主可以传多个对象进去,让一个线程调用多个方法。

多线程速度比较慢,能用单线程就尽量用单线程。

热心网友 回答时间:2024-05-17 20:46
方法有很多种
最简单的就是使用静态变量。
如果线程耗时较长且不用等待线程运行完毕的话,直接另起一个线程就可以了。追问传值能说具体点嘛?我不是很了解多线程 谢谢。。。

追答new thread1().run();
new thread2().run();
new thread3().run();
new thread4().run();
new thread....().run();

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

最肉麻的情话22 19款君越可以加装自动驻车吗? 怎么用加好友338 侯德榜化工科学技术奖含金量 哺乳动物的胎生哺乳是怎么回事?1 侠客风云传前传云游商人在哪 云游商人卖什么东西1 学编程的适合用macbook air 还是 pro?前端后端都要写 如何强制二次修改 《爱情回来了》里毛晓彤好潮啊!大家觉得她漂亮吗? 辛弃疾词的风格是什么?319 为什么隋唐两代都铁了心的要消灭高句丽?1 java为什么多线程往一个list中放值,但是放 口袋妖怪黑2立涌市的小树怎么砍断?4 求电影霍元甲中的经典句子 ! 对方违停,我刮了他的车,谁的责任呢? 怎样通过添加好友1 图,飞机在距地面9km高空上飞行,先在A处测得正前方某小岛C...2 辛弃疾有哪些著名的词756 如何强制二次修改 得了急性咽喉炎,我该怎么办19 华为par-al00有空调遥控器吗? 华为PRA-AL00X是什么型号?693 如何一年内强制二次修改? 辛弃疾最著名的词?3879 一个男生对我说,他仅仅是期待着你我美好的未来,什么意思 测绘图人员绘制地图时,常常需要在高空的飞机上向地面照相,74 什么是.教育服务14 想买二手车,看了绅宝x25,猎豹cs9,比速t3 都是2017款的,价格差不多这... 口袋妖怪白版。最开始这颗树似乎可以砍断。怎么砍。 口袋妖怪黑白2怎么砍树啊? 不到一年怎么改第二次 一个手机号在注册了一个微信后又注册了新的,旧的怎么找回? 对于需取得患者书面同意方可进行的医疗活动,以下哪一做法不正确_百度知 ... 哺乳动物是由什么进化而来的46 不吹不黑,马化腾和王思聪谁比较 怎么强制修改第二次 公司内部协议和法定劳动合同有冲突,怎么解决?是这样的,我是福建,公司... 淘宝商铺参加促销假一赔三是什么意思? 三国战纪风云再起白黄的转身撞总是接不上 请教易语言高手 随机取数组(为什么会重复)下面是代码 是那有问题啊?谢...
Top