最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何實(shí)現(xiàn)Java線程安全問(wèn)題

 更新時(shí)間:2019年12月27日 10:10:09   作者:糖不甜,鹽不咸  
這篇文章主要介紹了如何實(shí)現(xiàn)Java線程安全問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

這篇文章主要介紹了如何實(shí)現(xiàn)Java線程安全問(wèn)題,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

解決線程安全問(wèn)題的第一種方案:使用同步代碼塊

格式:

  synchronized(鎖對(duì)象) {

    可能會(huì)出現(xiàn)線程安全問(wèn)題的代碼(訪問(wèn)了共享數(shù)據(jù)的代碼)

  }

注意:代碼塊中的鎖對(duì)象,可以是任意對(duì)象,但必須保證多個(gè)線程之間使用的是同一個(gè)

鎖對(duì)象的作用是把同步代碼塊鎖住,同一時(shí)間只能讓一個(gè)線程在同步代碼塊中執(zhí)行

package com.fgy.demo02;

/**
 * 實(shí)現(xiàn)賣票案例
 */
public class RunnableImpl implements Runnable {
  private int ticket = 100;
  Object obj = new Object();

  @Override
  public void run() {
    while (true) {
      synchronized (obj) {
        if (ticket > 0) {
          try {
            Thread.sleep(100);
          } catch (InterruptedException e) {
            e.printStackTrace();
          }
          System.out.println(Thread.currentThread().getName() + "正在買第" + ticket + "張票");
          ticket--;
        }
      }
    }
  }
}
package com.fgy.demo02;

public class Demo01Ticket {
  public static void main(String[] args) {
    RunnableImpl run = new RunnableImpl();
    new Thread(run).start();
    new Thread(run).start();
    new Thread(run).start();
  }
}

解決線程安全問(wèn)題的第二種方案:使用同步方法

使用步驟:

   1.把訪問(wèn)了共享數(shù)據(jù)的代碼抽取出來(lái),放到一個(gè)方法中

   2.在方法上添加synchronized修飾符

格式:

  修飾符 synchronized 返回值類型 方法名(...) {

    可能會(huì)出現(xiàn)線程安全問(wèn)題的代碼(訪問(wèn)了共享數(shù)據(jù)的代碼)

  }

同步方法的鎖對(duì)象是:this

靜態(tài)同步方法的鎖對(duì)象不能是this,因?yàn)閠his是創(chuàng)建對(duì)象后產(chǎn)生的,靜態(tài)方法優(yōu)先于對(duì)象

靜態(tài)方法的鎖對(duì)象是本類的class文件對(duì)象

package com.fgy.demo03;

/**
 * 實(shí)現(xiàn)賣票案例
 */
public class RunnableImpl implements Runnable {
  private int ticket = 100;

  @Override
  public void run() {
    while (true) {
      payTicket();
    }
  }

  public synchronized void payTicket() {
    if (ticket > 0) {
      try {
        Thread.sleep(100);
      } catch (InterruptedException e) {
        e.printStackTrace();
      }
      System.out.println(Thread.currentThread().getName() + "正在買第" + ticket + "張票");
      ticket--;
    }
  }
}

解決線程安全問(wèn)題的第三種方案:使用lock鎖

使用步驟:

   1.在成員位置創(chuàng)建ReenterantLock對(duì)象

   2.在可能出現(xiàn)安全問(wèn)題的代碼前調(diào)用Lock接口中的方法lock()獲取鎖

   3.在可能出現(xiàn)安全問(wèn)題的代碼后調(diào)用Lock接口中的方法unlock()釋放鎖

package com.fgy.demo04;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * 實(shí)現(xiàn)賣票案例
 */
public class RunnableImpl implements Runnable {
  private int ticket = 100;
  Lock l = new ReentrantLock();

  /*@Override
  public void run() {
    while (true) {
      l.lock();

      if (ticket > 0) {
        try {
          Thread.sleep(100);
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + "正在買第" + ticket + "張票");
        ticket--;
      }

      l.unlock();
    }
  }*/

  @Override
  public void run() {
    while (true) {
      l.lock();

      if (ticket > 0) {
        try {
          Thread.sleep(100);
          System.out.println(Thread.currentThread().getName() + "正在買第" + ticket + "張票");
          ticket--;
        } catch (InterruptedException e) {
          e.printStackTrace();
        } finally {
          // 無(wú)論程序是否發(fā)生異常都會(huì)釋放鎖
          l.unlock();
        }
      }
    }
  }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • IntelliJ IDEA JRebel 安裝使用圖文教程(熱部署插件)

    IntelliJ IDEA JRebel 安裝使用圖文教程(熱部署插件)

    IDEA 全稱 IntelliJ IDEA,是java語(yǔ)言開(kāi)發(fā)的集成環(huán)境,IntelliJ在業(yè)界被公認(rèn)為最好的java開(kāi)發(fā)工具之一。這篇文章主要介紹了IntelliJ IDEA 熱部署插件JRebel 安裝使用圖文教程,需要的朋友可以參考下
    2018-03-03
  • Java發(fā)送https請(qǐng)求代碼實(shí)例

    Java發(fā)送https請(qǐng)求代碼實(shí)例

    這篇文章主要介紹了Java發(fā)送https請(qǐng)求代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-08-08
  • 使用SpringBoot中整合Redis

    使用SpringBoot中整合Redis

    這篇文章主要介紹了使用SpringBoot中整合Redis,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring MVC中處理ajax請(qǐng)求的跨域問(wèn)題與注意事項(xiàng)詳解

    Spring MVC中處理ajax請(qǐng)求的跨域問(wèn)題與注意事項(xiàng)詳解

    跨域問(wèn)題是我們大家在開(kāi)發(fā)中會(huì)經(jīng)常遇到的一個(gè)問(wèn)題,所以下面這篇文章主要給大家介紹了關(guān)于Spring MVC中處理ajax請(qǐng)求的跨域問(wèn)題與注意事項(xiàng)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-11-11
  • MyBatis延遲加載與立即加載案例教程

    MyBatis延遲加載與立即加載案例教程

    這篇文章主要介紹了MyBatis延遲加載與立即加載案例教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • Java?swing創(chuàng)建一個(gè)窗口的簡(jiǎn)單步驟

    Java?swing創(chuàng)建一個(gè)窗口的簡(jiǎn)單步驟

    這篇文章主要給大家介紹了關(guān)于Java?swing創(chuàng)建一個(gè)窗口的簡(jiǎn)單步驟,Java Swing是Java平臺(tái)下的GUI(Graphical User Interface,圖形用戶界面)工具包,提供了豐富的GUI組件,可以實(shí)現(xiàn)復(fù)雜的圖形界面應(yīng)用程序,需要的朋友可以參考下
    2024-06-06
  • idea運(yùn)行main方法或Test避免編譯整個(gè)應(yīng)用的實(shí)現(xiàn)方法

    idea運(yùn)行main方法或Test避免編譯整個(gè)應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了idea運(yùn)行main方法或Test避免編譯整個(gè)應(yīng)用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • springmvc+shiro+maven 實(shí)現(xiàn)登錄認(rèn)證與權(quán)限授權(quán)管理

    springmvc+shiro+maven 實(shí)現(xiàn)登錄認(rèn)證與權(quán)限授權(quán)管理

    Shiro 是一個(gè) Apache 下的一開(kāi)源項(xiàng)目項(xiàng)目,旨在簡(jiǎn)化身份驗(yàn)證和授權(quán),下面通過(guò)實(shí)例代碼給大家分享springmvc+shiro+maven 實(shí)現(xiàn)登錄認(rèn)證與權(quán)限授權(quán)管理,感興趣的朋友一起看看吧
    2017-09-09
  • Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間

    Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間

    這篇文章主要介紹了Jpa 實(shí)現(xiàn)自動(dòng)更新表中的創(chuàng)建日期和修改時(shí)間,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • java如何實(shí)現(xiàn)圖片轉(zhuǎn)化為數(shù)據(jù)流

    java如何實(shí)現(xiàn)圖片轉(zhuǎn)化為數(shù)據(jù)流

    這篇文章主要介紹了java如何實(shí)現(xiàn)圖片轉(zhuǎn)化為數(shù)據(jù)流,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01

最新評(píng)論

岑溪市| 中方县| 普洱| 桐柏县| 吕梁市| 萨迦县| 定兴县| 富阳市| 方城县| 濮阳县| 石河子市| 佛坪县| 汉沽区| 湟源县| 东丰县| 曲水县| 德格县| 宜城市| 安国市| 蒙阴县| 泗水县| 康平县| 岳普湖县| 巨野县| 中卫市| 墨竹工卡县| 龙南县| 平罗县| 玉林市| 浦东新区| 平谷区| 邳州市| 肇州县| 明水县| 江口县| 玉树县| 凉城县| 星座| 铁力市| 德兴市| 和龙市|