java for循环 多线程_for循环使用多线程优化

本文通过示例展示了如何使用Java的for循环和多线程进行优化。首先创建了一个ArrayList并填充数据,然后调用了两个方法:m1()使用ExecutorService和CountDownLatch并发执行任务,每个任务模拟了耗时操作;而m2()则直接在主线程中通过for循环执行耗时操作。通过对比两个方法的执行时间,探讨了多线程在处理耗时任务时的优势。
摘要由CSDN通过智能技术生成

list = new ArrayList<>();

for(int i=0;i<10;i++){

list.add(i);

}

test.m1(list);

long et2 = System.currentTimeMillis();

System.out.println("[1]耗时:"+(et2 - bt)+ "ms");

Thread thread = new Thread();

long at = System.currentTimeMillis();

test.m2();

long et3 = System.currentTimeMillis();

System.out.println("[2]耗时:"+(et3 - at)+ "ms");

}

public void m1( Listlist) {

ExecutorService pool = Executors.newCachedThreadPool();

CountDownLatch latch = new CountDownLatch(list.size());

for (int i = 0; i < list.size(); i++) {

final int index = i;

Runnable run = new Runnable() {

public void run() {

try {

new Thread().slee

Java中,可以使用多线程来实现并行执行的for循环。以下是一个示例代码: ```java import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MultiThreadedForLoop { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; // 创建一个固定大小的线程池 ExecutorService executor = Executors.newFixedThreadPool(4); // 定义每个线程负责处理的元素数量 int chunkSize = array.length / executor.getMaximumPoolSize(); // 循环提交任务给线程池 for (int i = 0; i < array.length; i += chunkSize) { int startIndex = i; int endIndex = Math.min(i + chunkSize, array.length); // 提交任务给线程池 executor.submit(() -> { for (int j = startIndex; j < endIndex; j++) { // 在这里编写需要执行的代码 System.out.println("Thread " + Thread.currentThread().getName() + ": " + array[j]); } }); } // 关闭线程池 executor.shutdown(); } } ``` 在上述示例中,我们使用`ExecutorService`来创建一个固定大小的线程池,这里设置为4个线程。然后,我们将任务分成多个块,每个线程负责处理一个块的元素。通过调用`executor.submit()`方法来提交任务给线程池执行。 请注意,多线程执行的结果可能不是按照数组元素的顺序输出的,因为线程的执行是异步的。如果需要按照顺序输出,可以在每个线程的任务完成后使用`CountDownLatch`或`join()`方法等待其他线程执行完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值