Сделайте ваш список синхронизированным списком:
List<MySocket> sockets = Collections.synchronizedList(new ArrayList<>());
И затем передайте это как параметр конструктора в SyncThread
:
new SyncThread(sockets).start(); // Need to add constructor parameter to class.
public class SyncThread extends Thread{
private final List<MySocket> sockets; // NOT static.
public SyncThread(List<MySocket> sockets) {
this.sockets = sockets;
}
...
}
Имейте в виду, что это не делает sockets
синхронизировано для составных операций, например, итерации. Для этого вам нужно явно синхронизировать на sockets
; или выберите другой тип списка, например CopyOnWriteArrayList
, который по своей природе является поточно-ориентированным (выбор зависит от характеристик чтения / записи того, как вы используете список).
Кроме того, редко бывает целесообразно расширять Thread
напрямую. Вместо этого передайте это Runnable
:
new Thread(() -> { /* send list sockets to client */ }).start();