Is the Iterator returned by an ArrayList or LinkedList Thread-Safe?

The iterators returned by these (ArrayList and LinkedList) class’s iterator and listIterator methods are fail-fast: if the list is structurally modified at any time after the iterator is created, in any way except through the iterator’s own remove or add methods, the iterator will throw a ConcurrentModificationException.
NOTE:

A structural modification is any operation that adds or deletes one or more elements, or explicitly resizes the backing array; merely setting the value of an element is not a structural modification.

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class Test {

	
	public static void main(String[] args) {
		
		final List<Integer> list = new ArrayList<Integer>();
		for(int i = 0;i<1000;i++){
		list.add(i);
		}
		
		Thread t1 = new Thread(){
			public void run(){
					ListIterator<Integer> it = list.listIterator();
					while(it.hasNext()){
						it.next();
//						it.set(1);
						it.add(1);
					}
				}
		};
		
		Thread t2 = new Thread(){
			public void run(){
					ListIterator<Integer> it = list.listIterator();
					while(it.hasNext()){
						it.next();
						it.set(2);
					}
				}
		};
		
		t1.start();
		t2.start();
		try {
			Thread.sleep(100);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println(list);
	}

}

Case 1:

Output:

Case 2:

Output: