我有两个线程,它们都访问Vector. t1添加一个随机数,而t2删除并打印第一个数字.下面是代码和输出. t2似乎只执行一次(在t1开始之前)并永远终止.我在这里错过了什么吗? (PS:同样使用ArrayList测试)
import java.util.Random;
import java.util.Vector;
public class Main {
public static Vector list1 = new Vector();
public static void main(String[] args) throws InterruptedException {
System.out.println("Main started!");
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("writer started! ");
Random rand = new Random();
for(int i=0; i<10; i++) {
int x = rand.nextInt(100);
list1.add(x);
System.out.println("writer: " + x);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("reader started! ");
while(!list1.isEmpty()) {
int x = list1.remove(0);
System.out.println("reader: "+x);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
});
t2.start();
t1.start();
t1.join();
t2.join();
}
}
输出:
主要开始!
读者开始了!
作家开始了!
作家:40
作家:9
作家:23
作家:5
作家:41
作家:29
作家:72
作家:73
作家:95
作家:46