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,请问要如何做呢?
}}
{
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,请问要如何做呢?
}}
解决方案 »
- $.fn.zTree为空或者不是对象
- SWT的table中我用TableEditor在单元格中设置了一个下拉框Combo,但如何获取呢?
- IO流中关于数据复制的问题
- jsp实现上传下载功能问题
- 一个类中方法2如何调用方法1的 变量?
- 概念题,大家来看看~~
- synchronized(this._lock) 什么意思?我就剩60分了,这次就给分就少些
- 在JSplitPane中两个拆分窗口中如何传递事件控制,该如何写代码呢?
- 我写了客户端跟服务器,有什么工具可以模仪出局域网的,贴上下载地址,马上送分!!
- 用JAVAMAIL如何设置content-type等参数??急
- 一个关于嵌套interface的问题
- RMI测试程序都没通过,高手帮看一下!
{
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");
}
}
不如在每个线程最后对一个声明为volatile的静态变量或者单例变量加1。
主线程循环检查该变量,如果小于10,就wait(1)。等于10就表示所有子线程执行完毕
((Thread)workingThread.get(i)).join();
}
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.");
}
}
}
((Thread)workingThread.get(i)).join();much better this. 受教育了。