关于一段多线程的代码,请教大家。。。。

wing888 2006-05-07 11:08:34
public void work() throws Exception
{
while( ...... )
{

Collection list = getList(); //

if( list!=null && !list.isEmpty() )
{
ThreadWork w = new ThreadWork(10, list); //用10个线程处理这个list
pwork.start();
}
System.out.println("abc");
//这里10个线程没有处理完这个list,就打印了abc。我希望在这10个线程处理完list后,才打印abc,并且while()得到下一个list,请问要如何做呢?
}

}
...全文
164 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zclgod 2006-05-08
  • 打赏
  • 举报
回复
学习
jshi123 2006-05-08
  • 打赏
  • 举报
回复
ChDw(米), ibiswang(神鸟) 有理:
((Thread)workingThread.get(i)).join();

much better this. 受教育了。

ibiswang 2006-05-08
  • 打赏
  • 举报
回复
package org.ibis.test;

public class ThreadTest1 {
Object notify = new Object();

public static void main(String[] args) throws Exception {
(new ThreadTest1()).work();
}

void work() throws Exception {
int group = 5;
while(group > 0) {
(new ThreadFactory(group, 10)).start();

Thread.sleep(100);
group--;
}
}
}

class ThreadFactory {
int counter = 0;
int group = 0;
Thread[] runningThreads = null;

ThreadFactory(int group, int counter) {
this.counter = counter;
this.group = group;
runningThreads = new ThreadWorker[counter];
}

void start() throws Exception {
for (int i =0 ; i < this.counter; i++) {
runningThreads[i] = new ThreadWorker(group, i);
runningThreads[i].start();
}

for(int i =0 ; i < this.counter; i++) {
runningThreads[i].join();
}
}

}
class ThreadWorker extends Thread {
int index = 0;
int group = 0;
ThreadWorker(int group, int index) {
this.index = index;
this.group = group;
}

public void run() {
try{
sleep(1000);
System.out.println(this.group + "-" + this.index);
}
catch(InterruptedException ex) {
System.out.print(this.group + "-" + this.index + " interrupted.");
}
}
}
treeroot 2006-05-08
  • 打赏
  • 举报
回复
pwork.start();

where is pwork defined?

s
ChDw 2006-05-08
  • 打赏
  • 举报
回复
for (int i=0; i<workingThreads.size(); i++) {
((Thread)workingThread.get(i)).join();
}
做鸡真好吃 2006-05-08
  • 打赏
  • 举报
回复
MM~
gogon 2006-05-08
  • 打赏
  • 举报
回复
楼上这样循环检查所有的线程代价太高昂。
不如在每个线程最后对一个声明为volatile的静态变量或者单例变量加1。
主线程循环检查该变量,如果小于10,就wait(1)。等于10就表示所有子线程执行完毕
jshi123 2006-05-07
  • 打赏
  • 举报
回复
public void work() throws Exception
{
while( ...... )
{

Collection list = getList(); //
ArrayList workingThreads = new ArrayList();

if( list!=null && !list.isEmpty() )
{
ThreadWork w = new ThreadWork(10, list); //用10个线程处理这个list
pwork.start();
workingThreads.add(w);
}
for (int i=0; i<workingThreads.size(); i++) {
while (((Thread)workingThread.get(i)).isAlive())
Thread.currentThread().yield();
}
System.out.println("abc");
}
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧