通過自定義注解對方法加鎖

多線程環(huán)境下洒宝,會出現(xiàn)線程不安全的問題,所以要對某些方法加鎖以保證線程安全萌京。常用的方法有:

final Reentrantlock lock = new Reentrantlock();
public void func(){
  lock.tryLock();
  //TODO
  lock.unlock();
}

但是如果方法過多雁歌,每個方法前后都加這么一句,有點(diǎn)麻煩了知残,而且代碼可讀性也會差一些靠瞎。可以使用aop切面編程橡庞,對某些加有特定注解(自定義注解)的方法做加鎖操作即可较坛。

定義注解

@Documented
@Target(ElementType.METHOD)
@Inherited
@Retention(RetentionPolicy.RUNTIME)
public @interface TryLock(){
  //TODO
}

定義切面類

public class TryLockAop{
  final ReentrantLock lock = new ReentrantLock();
  
  public Object trylockByAop(ProceedingJoinPoint joinPoint){
    Object obj = null;
    try{
      if(!lock.tryLock()){
        throw new IllegalArgumentException("當(dāng)前資源證被占用");
     }
      System.out.println("已成功加鎖");
      obj = joinPoint.proceed();
    }catch(Throwable){
      //TODO
    }finally{
      if(lock.isLocked()){
        lock.unlock();
        System.out.println("已成功釋放");
      }
    }
    return obj;
  }
}

定義使用類

public class HelloWorld{
  //使用自定義注解@TryLock
  @TryLock
  public void hello(){
    System.out.println("hello world");
  }
}

配置文件

<bean id="helloWorld" class="com.xxx.HelloWorld"/>

<bean id="TryLockAop" class="com.xxx.TryLockAop"/>

<aop:config>
  <aop:aspect>
    <!-- 對加有注解@TryLock的方法執(zhí)行該切面的方法 -->
    <aop:pointcut id="testTrylockPoint" expression="@annotation(com.xxx.TryLock)" />
    <aop:around method="trylockByAop" pointcut-ref="testTrylockPoint"/>
  </aop:aspect>
</aop:config>

測試

public static void main(String[] args){
  ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});
  context.start();
  HelloWorld hello = (HelloWorld)context.getBean("HelloWorld");
  hello.hello();
}

結(jié)果為:

已成功加鎖
hello
已成功釋放
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市扒最,隨后出現(xiàn)的幾起案子丑勤,更是在濱河造成了極大的恐慌,老刑警劉巖吧趣,帶你破解...
    沈念sama閱讀 212,816評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件法竞,死亡現(xiàn)場離奇詭異耙厚,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岔霸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評論 3 385
  • 文/潘曉璐 我一進(jìn)店門薛躬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人呆细,你說我怎么就攤上這事型宝。” “怎么了絮爷?”我有些...
    開封第一講書人閱讀 158,300評論 0 348
  • 文/不壞的土叔 我叫張陵趴酣,是天一觀的道長。 經(jīng)常有香客問我坑夯,道長岖寞,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評論 1 285
  • 正文 為了忘掉前任柜蜈,我火速辦了婚禮仗谆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淑履。我一直安慰自己隶垮,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評論 6 385
  • 文/花漫 我一把揭開白布鳖谈。 她就那樣靜靜地躺著岁疼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缆娃。 梳的紋絲不亂的頭發(fā)上捷绒,一...
    開封第一講書人閱讀 50,084評論 1 291
  • 那天,我揣著相機(jī)與錄音贯要,去河邊找鬼暖侨。 笑死,一個胖子當(dāng)著我的面吹牛崇渗,可吹牛的內(nèi)容都是我干的字逗。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼宅广,長吁一口氣:“原來是場噩夢啊……” “哼葫掉!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起跟狱,我...
    開封第一講書人閱讀 37,912評論 0 268
  • 序言:老撾萬榮一對情侶失蹤俭厚,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后驶臊,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挪挤,經(jīng)...
    沈念sama閱讀 44,355評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡叼丑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扛门。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片鸠信。...
    茶點(diǎn)故事閱讀 38,809評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖论寨,靈堂內(nèi)的尸體忽然破棺而出星立,到底是詐尸還是另有隱情,我是刑警寧澤葬凳,帶...
    沈念sama閱讀 34,504評論 4 334
  • 正文 年R本政府宣布贞铣,位于F島的核電站,受9級特大地震影響沮明,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜窍奋,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評論 3 317
  • 文/蒙蒙 一荐健、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧琳袄,春花似錦江场、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至碎紊,卻和暖如春佑附,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背仗考。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評論 1 267
  • 我被黑心中介騙來泰國打工音同, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人秃嗜。 一個月前我還...
    沈念sama閱讀 46,628評論 2 362
  • 正文 我出身青樓权均,卻偏偏與公主長得像,于是被迫代替她去往敵國和親锅锨。 傳聞我的和親對象是個殘疾皇子叽赊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評論 2 351

推薦閱讀更多精彩內(nèi)容

  • 從三月份找實(shí)習(xí)到現(xiàn)在,面了一些公司必搞,掛了不少必指,但最終還是拿到小米、百度顾画、阿里取劫、京東匆笤、新浪、CVTE谱邪、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,218評論 11 349
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,867評論 25 707
  • 我試著去整理自己的思路來減輕心理負(fù)擔(dān)炮捧,只是印證了剪不斷理還亂。后來發(fā)現(xiàn)惦银,一切的一切歸咎于自己不夠努力咆课,會心安很...
    涵肆閱讀 337評論 0 0
  • #import #import "UserGuideViewController.h" #import "WeiB...
    lichengjin閱讀 337評論 0 0
  • 百度直接搜react路由的資料比較少,建議直接上github扯俱,頭部就是docs鏈接了 文檔雖然是英文的书蚪,但是很清楚...
    反者道之動001閱讀 1,472評論 0 0