同步的意思就是加锁后,其他线程不能进来除非锁里面的线程运行完了才给其他线程的cpu的执行权。所以很显然当其他线程过来抢夺CPU执行权时先要判断锁是不是开着的,这无形中增加了CPU的运算量,所以效率底。但是凡事有弊就有利,虽然同步后效率低了,但安全性却大大提升了,当有共享数据时,其他线程就不会干扰共享数据,出现结果错乱的问题。讲的这么空乏,不如下面给你个事例阿:
class Demo
{
synchronized(this)//锁,每次线程运行都要判断,效率低但安全,不会出现共享数据的混乱
{
int x=1://共享数据
x=x+1;
}
System.out.println(x);
}
class Test
{
Demo d=new Demo();
//建立两个线程并运行
Thread t1=new Thread(d);
Thread t2=new Thread(d);
t1.start();
t2.start();
} |