线程同步锁的对象和内容有什么关系?
请教一下, 下面一个线程添加元素, 一个线程遍历元素, 在同步锁中加List和随便加一个对象有什么区别?都可以达到效果, 是不是同步锁的
对象和内容没关系?
public class Test {
public static void main(String[] args) {
List<Integer> list = new ArrayList();
Thread1 t1 = new Thread1(list);
Thread2 t2 = new Thread2(list);
t1.start();
t2.start();
}
}
class Thread1 extends Thread{
List<Integer> list;
public Thread1(List<Integer> list) {
this.list = list;
}
public void run(){
add();
}
//往集合里添加10个1-99的随机数
public void add(){
synchronized (list) {
try {
Random rd = new Random();
for (int i = 0; i < 10; i++) {
int num = rd.nextInt(100);
list.add(num);
Thread1.sleep(100);
System.out.println("添加:" + num);
}
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
class Thread2 extends Thread{
List<Integer> list;
public Thread2(List<Integer> list) {
this.list = list;
}
public void run(){
list();
}
//遍历集合元素
public void list(){
synchronized (list) {
try {
Thread2.sleep(100);
for (int i : list) {
System.out.println("遍历:" + i);
}
System.out.println("遍历完毕");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}