[size=medium]synchronized关键字在线程中扮演的很重要的作用,对它的使用近来了解如下:1、synchronized作用于类范围。
synchronized static void theMethod(),这个方法所在的class作为锁,多个线程想要访问这这一方法,在一个方法获得锁,则其余的需要等待释放的锁。与其相同的还有同步区块,对一个区块的代码同步:static void thisMethod(){
synchronized(object){//要同步的代码}
}
2、synchronized作用于实例范围。
所谓实例范围理解中也就是class中非static的方法,例如synchronized void theMethod(){},这个方法的实例就成了锁,如果多个线程想调用同一实例的这个方法时,先得到锁的线程执行,其余的线程就进入就绪队列等待获得锁。但是如果有多个实例的话,多个实例的theMethod并不发生影响,这一点与类范围的不同,类范围情况下只允许有一个synchronized修饰的static方法运行。与其相同的用法还有同步区块。
3、synchronized关键字不允许继承,父类的方法sychonized void fun(){}在子类中被继承为了 void fun(){}。[/size]
synchronized static void theMethod(),这个方法所在的class作为锁,多个线程想要访问这这一方法,在一个方法获得锁,则其余的需要等待释放的锁。与其相同的还有同步区块,对一个区块的代码同步:static void thisMethod(){
synchronized(object){//要同步的代码}
}
2、synchronized作用于实例范围。
所谓实例范围理解中也就是class中非static的方法,例如synchronized void theMethod(){},这个方法的实例就成了锁,如果多个线程想调用同一实例的这个方法时,先得到锁的线程执行,其余的线程就进入就绪队列等待获得锁。但是如果有多个实例的话,多个实例的theMethod并不发生影响,这一点与类范围的不同,类范围情况下只允许有一个synchronized修饰的static方法运行。与其相同的用法还有同步区块。
3、synchronized关键字不允许继承,父类的方法sychonized void fun(){}在子类中被继承为了 void fun(){}。[/size]