📜  使用线程读取和写入数组

📅  最后修改于: 2021-09-04 08:18:23             🧑  作者: Mango

数组是存储在连续内存位置的项目的集合。这个想法是将多个相同类型的项目存储在一起。这使得通过简单地将偏移量添加到基值,即数组的第一个元素的内存位置(通常由数组的名称表示)来更容易地计算每个元素的位置。数组用于存储同类数据。如果有很多元素,将元素存储在数组中并从数组中读取元素的传统方法会花费大量时间。

大批

在数组中写入和读取元素是一个小问题,首先将每个元素添加到数组中,然后将整个数组逐个元素读取并打印在控制台上。但是当元素数量太多时,可能需要很多时间。但这可以通过将写作和阅读任务分成几部分来解决。

这可以通过使用多线程来完成,其中使用处理器的每个核心。在这种情况下,使用了两个线程,其中一个线程负责写入数组,另一个线程负责读取数组。这样,既可以提高程序的性能,又可以充分利用处理器的内核。每个内核最好使用一个线程。尽管可以根据需要创建任意数量的线程,以便更好地理解多线程。

本文重点介绍使用多线程概念编写和读取数组元素。

方法:本节说明设计使用多线程写入和读取数组元素的程序所遵循的算法:

  • 在第一步中,将创建两个线程。
  • 一种用于写操作,一种用于读操作。
  • 这里同步关键字与数组一起使用,以便一次只有一个线程可以访问数组。
  • 首先,将对数组执行写操作。
  • 然后,对数组执行读操作。

下面是实现上述方法的Java程序-

Java
// Java program for the above approach
import java.io.*;
import java.util.*;
class GFG {
    public static void main(String[] args)
    {
        // Array created for 5 elements
        int a[] = new int[5];
  
        // Thread created for write operation
        Thread t1 = new Thread(new Runnable() {
            public void run()
            {
                // Here the array is being
                // synchronized
                synchronized (a)
                {
                    Scanner s = new Scanner(System.in);
                    System.out.println(
                        "Enter the elements : ");
  
                    for (int i = 0; i < 5; i++) {
                        a[i] = s.nextInt();
                    }
  
                    System.out.println(
                        "Writing done Successfully");
                }
            }
        });
  
        // Thread created for read operation
        Thread t2 = new Thread(new Runnable() {
            public void run()
            {
                // Here the array is being
                // synchronized
                synchronized (a)
                {
                    System.out.println(
                        "The elements are : ");
  
                    for (int i = 0; i < 5; i++) {
                        System.out.println(a[i]);
                    }
  
                    System.out.println(
                        "Reading done successfully");
                }
            }
        });
  
        // Write thread is started
        t1.start();
  
        // Read thread is started
        t2.start();
    }
}


输出:

输出

说明:这里首先启动写线程,此时读线程不会干扰,因为数组是同步的。同样,在读取过程中,写入线程也不会干扰。