Мне нужно добавить объекты пула потоков в ArrayList
, чтобы подсчитать общее количество объектов, созданных моим пулом потоков. Для этого я создал ArrayList
, и после выполнения пула потоков я добавляю объект в ArrayList
. Моя проблема в том, что новые пулы потоков перезаписывают существующий объект в моем Arraylist
, и поэтому Arraylist
всегда будет иметь одинаковый размер, независимо от того, сколько раз будет выполняться код.
My ArrayList
:
protected ArrayList<Runnable> ComponentBuild = new ArrayList<>();
Где начались потоки:
public void tireComponent() {
Menu menu = new Menu();
ExecutorService executor = Executors.newFixedThreadPool(3);
// ThreadPoolExecutor executor = new ThreadPoolExecutor();
for (int i = 1; i <= 3; i++) {
Runnable tire = new Tire("" + i);
executor.execute(tire);
ComponentBuild.add(tire);
System.out.println(ComponentBuild);
if (ComponentBuild.size() == MAX_CAPACITY) {
sleep();
}
}
Класс шин:
public class Tire implements Runnable, Component {
private String number;
public Tire(String Number) {
this.number = Number;
}
@Override
public void run() {
System.out.println("Tire number " + number + " has now begun creation");
processCommand();
System.out.println("Thread " + Thread.currentThread().getName() + " has now created number " + number + " tire");
}
private void processCommand() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public String toString() {
return this.number;
}
}
Результат в терминале:
You have the following options:
1) Create normal trie
2) Create winter tire
3) Create premium tire
1
[1]
Tire number 1 has now begun creation
[1, 2]
Tire number 2 has now begun creation
[1, 2, 3]
You have the following options:
1) Create normal trie
2) Create winter tire
3) Create premium tire
Tire number 3 has now begun creation
Thread pool-1-thread-2 has now created number 2 tire
Thread pool-1-thread-1 has now created number 1 tire
Thread pool-1-thread-3 has now created number 3 tire
1
[1]
Tire number 1 has now begun creation
[1, 2]
Tire number 2 has now begun creation
[1, 2, 3]
You have the following options:
1) Create normal trie
2) Create winter tire
3) Create premium tire
Tire number 3 has now begun creation
Thread pool-2-thread-1 has now created number 1 tire
Thread pool-2-thread-2 has now created number 2 tire
Thread pool-2-thread-3 has now created number 3 tire
Мне бы хотелось, чтобы вывод был таким:
Tire number 2 has now begun creation
[1, 2, 3, 4, 5, 6]
Но фактический вывод - это второй пул потоков, перезаписывающий существующие объекты в моем массиве, поэтому как быМного раз я запускаю код, ArrayList
всегда будет:
[1, 2, 3]
Редактировать: В соответствии с запросом, интерфейс моего компонента:
package Model;
public interface Component {
void run();
String toString();
}