вам нужно будет либо синхронизировать все операции чтения и записи в этот список, либо использовать многопоточный способный список (например, CopyOnWriteArrayList или даже ConcurrentMap, если вы используете его для более сложных вещей).
В противном случае вам потребуется хороший контроль параллелизма, чтобы разные потоки не перезаписывали друг друга, а также чтобы другие потоки могли видеть изменения, которые были внесены.
повторное редактирование:
лучший способ передачи данных между потоками - это разделение структуры данных. Статические переменные - это один из способов, но это не единственный способ поделиться. Вы можете поделиться через общий объект, который передается в обоих потоках (например, в конструкторе). Обычно это называется очередью, в которую записывает один поток, а другие - из. В Java есть несколько блокирующих очередей, чтобы сделать это проще - посмотрите множество различных классов в этом пакете http://download.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/package-summary.html