Как я могу написать данные в 4 листах параллельно?JAVA

Программисты JAVA общаются здесь
Anonymous
Как я могу написать данные в 4 листах параллельно?

Сообщение Anonymous »

Я пишу калькулятор, и в ходе написания его я решил добавить примеры элементов в 4 различных массивов. Я записываю строки в простынях. У меня вопрос, как заполнить 4 Arraylist параллельно с помощью многопоточного чтения? Нужно ли мне использовать синхронизацию на разных объектах, или мне нужно использовать безопасные потоки классов? Или я должен использовать оба?import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class AddElementsInLists {
private List firstValues = new ArrayList();
private List firstSymbols = new ArrayList();
private List secondValues = new ArrayList();
private List secondSymbols = new ArrayList();

private static final Object lock1 = new Object();
private static final Object lock2 = new Object();
private static final Object lock3 = new Object();
private static final Object lock4 = new Object();

public static void addingForFirstList(String firstValue, Scanner scanner, List firstValues) {
synchronized (lock1) {
firstValue = scanner.nextLine();
firstValues.add(firstValue);
}
}

public static void addingForSymbolsList1(String firstSymbol, Scanner scanner, List firstSymbols) {
synchronized (lock2) {
firstSymbol = scanner.nextLine();
firstSymbols.add(firstSymbol);
}
}

public static void addingForSecondList(String secondValue, Scanner scanner, List secondValues) {
synchronized (lock3) {
secondValue = scanner.nextLine();
secondValues.add(secondValue);
}
}

public static void addingForSymbolsList2(String secondSymbol, Scanner scanner, List secondSymbols) {
synchronized (lock4) {
secondSymbol = scanner.nextLine();
secondSymbols.add(secondSymbol);
} // return secondSymbols;
}
}
chat.sendMessage();

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test {
private static String firstValue;
private static String firstSymbol;
private static String secondValue;
private static String secondSymbol;

private static List firstValues = new ArrayList();
private static List firstSymbols = new ArrayList();
private static List secondValues = new ArrayList();
private static List secondSymbols = new ArrayList();

public static void main(String[] args) throws InterruptedException {
Scanner scanner = new Scanner(System.in);
while (!scanner.nextLine().equals("=")) {
Thread thread1 = new Thread(new Runnable() {
@Override
public void run() {
AddElementsInLists.addingForFirstList(firstValue, scanner, firstValues);
}
});
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
AddElementsInLists.addingForFirstList(firstSymbol, scanner, firstSymbols);
}
});
Thread thread3 = new Thread(new Runnable() {
@Override
public void run() {
AddElementsInLists.addingForFirstList(secondValue, scanner, secondValues);
}
});
Thread thread4 = new Thread(new Runnable() {
@Override
public void run() {
AddElementsInLists.addingForFirstList(secondSymbol, scanner, secondSymbols);
}
});
thread1.start();
thread2.start();
thread3.start();
thread4.start();

thread1.join();
thread4.join();
thread2.join();
thread3.join();
}
System.out.println(firstValues);
System.out.println(firstSymbols);
System.out.println(secondValues);
System.out.println(secondSymbols);
}
}



Подробнее здесь: https://stackoverflow.com/questions/795 ... n-parallel

Вернуться в «JAVA»