import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import com.mwf.studyjob.R;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
/**
* 动态添加线程,然后监控多个线程是否都完成了
*/
public class WatchThreadActivity extends AppCompatActivity {
private Executor executor;
private int threadNum = 100;
private int index = 0;
private List<Flag> flags = new ArrayList<Flag>();
private class Flag {
private int flag;
private boolean status;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getFlag() {
return flag;
}
public void setFlag(int flag) {
this.flag = flag;
}
public boolean isStatus() {
return status;
}
public void setStatus(boolean status) {
this.status = status;
}
}
Handler hander = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Flag flag = (Flag) msg.obj;
for (int i = 0; i < flags.size(); i++) {
if (flags.get(i).getFlag() == flag.getFlag()) {
flags.get(i).setStatus(true);
System.out.println(flags.get(i).getName() + "完成...");
}
}
System.out.println("未完成如下:");
int lastCount = 0;
for (int i = 0; i < flags.size(); i++) {
if (!flags.get(i).isStatus()) {
lastCount += 1;
System.out.println(flags.get(i).getName());
}
}
if (lastCount == 0) {
System.out.println("全部完成!");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_watch_thread);
executor = Executors.newFixedThreadPool(threadNum);
}
public void start(View view) {
index++;
Flag flag = new Flag();
flag.setFlag(index);
flag.setStatus(false);
flags.add(flag);
Runnable runnable = new TestThread(flag);
executor.execute(runnable);
}
private class TestThread implements Runnable {
private Flag flag;
public TestThread(Flag flag) {
this.flag = flag;
}
@Override
public void run() {
flag.setName(Thread.currentThread().getName());
System.out.println(Thread.currentThread().getName() + "开始...");
try {
Random random = new Random();
int count = random.nextInt(10) + 1;
System.out.println(Thread.currentThread().getName() + "睡眠:" + count);
Thread.sleep(1000 * count);
} catch (InterruptedException e) {
e.printStackTrace();
}
Message message = Message.obtain();
message.obj = flag;
hander.sendMessage(message);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:onClick="start"
android:text="增加"/>
</LinearLayout>