java教程

java synchronized关键字的使用

位置:首页 > java教程 > java技巧,2013-12-25
synchronized关键字非常重要,它涉及到多线程中的同步的问题,现在我们分析一下该关键字的"作用域"问题(这里只谈及到它的其中修饰方法时的用法),就是说它

synchronized关键字非常重要,它涉及到多线程中的同步的问题,现在我们分析一下该关键字的"作用域"问题(这里只谈及到它的其中修饰方法时的用法),就是说它什么时候会起效.方法很简单,就是写一个永远不会执行完毕的方法.

我们新建了一个SynchronizedTest类来演绎该关键字的作用域,详细代码请看附件:

需要验证作用域的情况有下面几种:

  1. 在同一个类中针对static关键字修饰的同一个函数,使用或者不使用synchronized进行修饰

SynInSameClaseSameStaticFunTest //使用synchronized关键字会出现死锁

NoSynInSameClaseSameStaticFunTest //不使用synchronized关键字不会出现死锁

  1. 在同一个类中针对static关键字修饰的不同函数,分别使用、不使用或者不同时使用synchronized进行修饰

SynInSameClaseDiffStaticFunTest //同时使用synchronized关键字会出现死锁

NotAllSynInSameClaseDiffStaticFunTest //不同时使用synchronized关键字不会出现死锁

NoSynInSameClaseDiffStaticFunTest //不使用synchronized关键字不会出现死锁

  1. 在同一个实例中的同一个函数,使用或者不使用synchronized进行修饰

SynInSameObjectSameFunTest //同时使用synchronized关键字会出现死锁

NoSynInSameObjectSameFunTest//不使用synchronized关键字不会出现死锁

  1. 在同一个实例中的不同函数,分别使用、不使用或者不同时使用一个synchronized进行修饰

SynInSameObjectDiffFunTest//同时使用synchronized关键字会出现死锁

NoSynInSameObjectDiffFunTest//不使用synchronized关键字不会出现死锁

NotAllSynInSameObjectDiffFunTest //不同时使用synchronized关键字不会出现死锁

 

  1. 在不同实例中的同名函数,使用或者不使用synchronized进行修饰

SynInDiffObjectSameFunTest //同时使用synchronized关键字不会出现死锁

NoSynInDiffObjectSameFunTest //不使用synchronized关键字不会出现死锁

  1. 在不同实例中的不同名函数,分别使用、不使用或者只使用一个synchronized进行修饰

SynInDiffObjectDiffFunTest //同时使用synchronized关键字不会出现死锁

NoSynInDiffObjectDiffFunTest //不使用synchronized关键字不会出现死锁

  1. 在同一个实例中的两个函数不同时使用static,使用或者不使用synchronized进行修饰

SynInSameObjectNotAllStaticFunTest //同时使用synchronized关键字会出现死锁

NoSynInSameObjectNotAllStaticFunTest//不使用synchronized关键字不会出现死锁

 

综合上面的测试可以知道,synchronized关键字用“互斥”这种说法比同步更加简明易懂。对于static方法之间、static与非static方法之间、同一个new对象的非static方法之间,如果使用了synchronized,一个方法处于运行状态的话,另外一个方法需要等待之前的方法完成之后才能够运行。

TAGS:synchronized关键字

猜你喜欢

NewHot