import java.util.ArrayList;
import java.util.List;
public class MultiThreadExample {
public static void main(String[] args) throws InterruptedException {
List<Integer> dataList = new ArrayList<>(); // 假设有一批需要处理的数据
for (int i = 1; i <= 100; i++) {
dataList.add(i);
}
int numThreads = 5; // 假设要用5个线程处理数据
List<Thread> threads = new ArrayList<>();
for (int i = 0; i < numThreads; i++) {
int startIndex = i * dataList.size() / numThreads;
int endIndex = (i + 1) * dataList.size() / numThreads;
List<Integer> subList = dataList.subList(startIndex, endIndex);
Thread thread = new Thread(new DataProcessor(subList)); // 创建线程并传入需要处理的数据
thread.start(); // 启动线程
threads.add(thread);
}
// 等待所有线程结束
for (Thread thread : threads) {
thread.join();
}
System.out.println("All threads have finished.");
}
static class DataProcessor implements Runnable {
private List<Integer> dataList;
public DataProcessor(List<Integer> dataList) {
this.dataList = dataList;
}
@Override
public void run() {
for (Integer data : dataList) {
// 对数据进行处理
System.out.println("Thread " + Thread.currentThread().getId() + " processed data: " + data);
}
}
}
}
首先创建了一个需要处理的数据列表dataList,然后定义了需要使用的线程数numThreads。接下来,根据需要处理的数据列表和线程数,将数据列表拆分成若干个子列表,每个子列表由一个线程处理。为每个线程创建一个DataProcessor对象,并将需要处理的子列表传入。然后使用Thread.start()方法启动线程,并将线程对象保存到一个列表threads中。最后使用Thread.join()方法等待所有线程结束。
需要注意的是,在处理数据时,需要考虑线程安全的问题。比如,对于需要修改共享变量的操作,需要使用同步机制来保证线程安全。此外,在设计多线程程序时,还需要考虑线程数量、线程调度、线程池等问题。