求教一个线程的问题。。。。。。。。。。。。。。。。!!
自学并发编程时候一个问题:
public class WriterTask implements Runnable{
private Deque<Event> deque;
public WriterTask(Deque<Event> deque) {
this.deque = deque;
}
@Override
public void run() {
for(int i =0; i<10; i++){
System.out.println(Thread.currentThread().getId()+": i="+i);
Event event = new Event();
event.setDate(new Date());
deque.add(event);
System.out.println("Thread"+Thread.currentThread().getId()+": "+deque.size());
}
}
Main类:
public class MainTest {
public static void main(String[] args) throws InterruptedException {
Deque<Event> deque = new ArrayDeque<Event>();
WriterTask writerTask = new WriterTask(deque);
Thread thread = new Thread(writerTask);
Thread thread2 = new Thread(writerTask);
thread.start();
thread2.start();
try {
thread.join();
thread2.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(deque.size());
}
}
打印结果:
10: i=0
11: i=0
Thread11: 1
Thread10: 1
11: i=1
10: i=1
Thread11: 2
11: i=2
Thread11: 4
11: i=3
Thread11: 5
Thread10: 3
10: i=2
Thread10: 6
10: i=3
11: i=4
Thread10: 7
Thread11: 8
10: i=4
Thread10: 9
11: i=5
10: i=5
Thread10: 11
Thread11: 10
10: i=6
Thread10: 12
10: i=7
Thread10: 13
10: i=8
Thread10: 14
10: i=9
11: i=6
Thread10: 15
Thread11: 16
11: i=7
Thread11: 17
11: i=8
Thread11: 18
11: i=9
Thread11: 19
19
按理说我最后deque.size()应该是20个,为什么有时候是20个有时候19个,若把线程类run中循环增加可能还会更少,不是很明白是什么道理?