我有一个同步的问题,比如说List的子类有ArrayList和Vector,ArrayList是非同步的,线程不安全;Vector是同步的,线程安全。但是我们用java做web的时候,很多用户同时访问服务器,也算是多线程吧,那这样就不应该用ArrayList,而使用Vector,但是看别人写的代码,几乎都使用ArrayList,那这样就是非同步了。
所以我想问问,这个同步synchronized到底怎么理解?
所以我想问问,这个同步synchronized到底怎么理解?
那么使用他的地方常常会加同步,因为会出现多线程。但是如果只是放在方法的局部变量中,只是方法自己用,或者只有一个线程会访问到,
那么是没必要同步的,从效率考虑,所以不使用vector。
列子中,要等一个线程完成run()后,将权限交接给第二个线程,才执行第二个线程.
synchronized 相当于将一个线程加了一把锁简单的就介绍到这里你看程序[/b]public class TestSync implements Runnable {
Timer timer = new Timer();
public static void main(String[] args) {
TestSync test = new TestSync();
Thread t1 = new Thread(test);
Thread t2 = new Thread(test);
t1.setName("t1");
t2.setName("t2");
t1.start();
t2.start();
}
public void run(){
timer.add(Thread.currentThread().getName());
}
}class Timer{
private static int num = 0;
public synchronized void add(String name){
//synchronized (this) {
num ++;
try {Thread.sleep(1);}
catch (InterruptedException e) {}
System.out.println(name+", 你是第"+num+"个使用timer的线程");
//}
}
}
private ArrayList aList;//在对它的操作中需要synchronized以保证线程安全
public synchronized addToList(Object item) {
aList.add(item);
}
public void service(){//省略service的完整声明
ArrayList bList;//这里可以直接操作,不用synchronized
}
}
所以线程安全不是不存在,而是在框架级别被解决了。