首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用3个线程将元素添加到5个ArrayList中:数组大小的总和总是不同的

使用3个线程将元素添加到5个ArrayList中,数组大小的总和总是不同的。

答案: 在这个问题中,我们可以使用多线程编程来实现将元素添加到5个ArrayList中。为了确保数组大小的总和总是不同的,我们可以使用线程同步机制来避免并发访问问题。

首先,我们需要创建5个ArrayList对象,用于存储元素。然后,我们创建3个线程,每个线程负责向这5个ArrayList中添加元素。

在每个线程中,我们可以使用互斥锁(mutex)来确保同一时间只有一个线程能够访问ArrayList。这可以通过在添加元素之前获取锁,并在添加完成后释放锁来实现。

以下是一个示例代码:

代码语言:txt
复制
import java.util.ArrayList;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class ArrayListThreadExample {
    private static ArrayList<Integer> arrayList1 = new ArrayList<>();
    private static ArrayList<Integer> arrayList2 = new ArrayList<>();
    private static ArrayList<Integer> arrayList3 = new ArrayList<>();
    private static ArrayList<Integer> arrayList4 = new ArrayList<>();
    private static ArrayList<Integer> arrayList5 = new ArrayList<>();
    private static Lock lock = new ReentrantLock();

    public static void main(String[] args) {
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                lock.lock();
                arrayList1.add(i);
                lock.unlock();
            }
        });

        Thread thread2 = new Thread(() -> {
            for (int i = 10; i < 20; i++) {
                lock.lock();
                arrayList2.add(i);
                lock.unlock();
            }
        });

        Thread thread3 = new Thread(() -> {
            for (int i = 20; i < 30; i++) {
                lock.lock();
                arrayList3.add(i);
                lock.unlock();
            }
        });

        Thread thread4 = new Thread(() -> {
            for (int i = 30; i < 40; i++) {
                lock.lock();
                arrayList4.add(i);
                lock.unlock();
            }
        });

        Thread thread5 = new Thread(() -> {
            for (int i = 40; i < 50; i++) {
                lock.lock();
                arrayList5.add(i);
                lock.unlock();
            }
        });

        thread1.start();
        thread2.start();
        thread3.start();
        thread4.start();
        thread5.start();

        try {
            thread1.join();
            thread2.join();
            thread3.join();
            thread4.join();
            thread5.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        System.out.println("ArrayList1: " + arrayList1);
        System.out.println("ArrayList2: " + arrayList2);
        System.out.println("ArrayList3: " + arrayList3);
        System.out.println("ArrayList4: " + arrayList4);
        System.out.println("ArrayList5: " + arrayList5);
    }
}

在这个示例中,我们使用了ReentrantLock来实现互斥锁。每个线程在添加元素之前都会获取锁,并在添加完成后释放锁。这样可以确保每个线程在操作ArrayList时不会被其他线程干扰。

最后,我们通过输出每个ArrayList的内容来验证结果。

请注意,以上示例代码仅为演示多线程操作ArrayList的思路,并不涉及具体的腾讯云产品。对于云计算领域的具体应用场景和推荐产品,可以根据实际需求进行选择。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

领券