我不主張用全局的,但如果你一定要,你可以不喜歡以下。一般來說:讓每個線程建立自己的數據。完成其工作後,將其數據添加到同步的全局集合中(本例中爲List<List<String>>
)。然後在所有線程完成工作後再讀取該收集。
全球收集的數據:
public class GlobalDataBroker {
public static List<List<String>> data = Collections.synchronizedList(new LinkedList<List<String>>());
}
的範例:
public static void main(String[] args) throws InterruptedException {
for (int i=0; i < 10; i++) {
new Thread(new Runnable(){
@Override
public void run() {
List<String> list = new LinkedList<String>();
list.add(String.format("I'm a Thread and my name is %s.",Thread.currentThread()));
for (int i = 0; i < 5; i++) {
list.add("Data!");
}
GlobalDataBroker.data.add(list);
}
}).start();
}
// When the threads are done ...
Iterator<List<String>> i = GlobalDataBroker.data.iterator();
while (i.hasNext()) {
System.out.println(i.next());
}
}
輸出:
[I'm a Thread and my name is Thread[Thread-8,5,main]., Data!, Data!, Data!, Data!, Data!]
[I'm a Thread and my name is Thread[Thread-5,5,main]., Data!, Data!, Data!, Data!, Data!]
...
[I'm a Thread and my name is Thread[Thread-7,5,main]., Data!, Data!, Data!, Data!, Data!]
請注意,你只應該開始遍歷數據,一旦你已經完成了寫作。 (否則,您可能會遇到可怕的ConcurrentModificationException
。)
有什麼問題? – MaVRoSCy
爲什麼你想*全局變量? – oldrinb
如果您擔心數組的大小,請使用列表? –