ArrayList多线程添加元素异常,怎么解决

public static void main(String[] args) {
Random random = new Random();
int i = random.nextInt(20);
ArrayList arrayList = new ArrayList<>();
for (int i1 = 0; i1 < i; i1++) {
new Thread(()->{
arrayList.add(Thread.currentThread().getName());
}).start();
}
System.out.println(arrayList);
}


 public static void main(String[] args) {
Random random = new Random();
int i = random.nextInt(20);
ArrayList arrayList = new ArrayList<>();
Object lockobj = new Object();
for (int i1 = 0; i1 < i; i1++) {
new Thread(()->{
synchronized(lockobj) {
arrayList.add(Thread.currentThread().getName());
}
}).start();
}
System.out.println(arrayList);
}