国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

靜態的同步方法

jlanglang / 2573人閱讀

摘要:靜態方法的鎖對象是本類的屬性賣票案例出現了線程安全問題賣出了不存在的票和重復的票解決線程安全問題的二種方案使用同步方法使用步驟把訪問了共享數據的代碼抽取出來放到一個方法中在方法上添加修飾符格式定義方法的格式修飾符返回值類型方法名參數列表可能


靜態方法的鎖對象是本類的class屬性
package com.itheima.demo08.Synchronized;
/*

賣票案例出現了線程安全問題
賣出了不存在的票和重復的票

解決線程安全問題的二種方案:使用同步方法
使用步驟:
    1.把訪問了共享數據的代碼抽取出來,放到一個方法中
    2.在方法上添加synchronized修飾符

格式:定義方法的格式
修飾符 synchronized 返回值類型 方法名(參數列表){
    可能會出現線程安全問題的代碼(訪問了共享數據的代碼)
}

*/
public class RunnableImpl implements Runnable{

//定義一個多個線程共享的票源
private static int ticket = 100;


//設置線程任務:賣票
@Override
public void run() {
    System.out.println("this:"+this);//this:com.itheima.demo08.Synchronized.RunnableImpl@58ceff1
    //使用死循環,讓賣票操作重復執行
    while(true){
        payTicketStatic();
    }
}

/*
    靜態的同步方法
    鎖對象是誰?
    不能是this
    this是創建對象之后產生的,靜態方法優先于對象
    靜態方法的鎖對象是本類的class屬性-->class文件對象(反射)
 */
public static /*synchronized*/ void payTicketStatic(){
    synchronized (RunnableImpl.class){
        //先判斷票是否存在
        if(ticket>0){
            //提高安全問題出現的概率,讓程序睡眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //票存在,賣票 ticket--
            System.out.println(Thread.currentThread().getName()+"-->正在賣第"+ticket+"張票");
            ticket--;
        }
    }

}

/*
    定義一個同步方法
    同步方法也會把方法內部的代碼鎖住
    只讓一個線程執行
    同步方法的鎖對象是誰?
    就是實現類對象 new RunnableImpl()
    也是就是this
 */
public /*synchronized*/ void payTicket(){
    synchronized (this){
        //先判斷票是否存在
        if(ticket>0){
            //提高安全問題出現的概率,讓程序睡眠
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            //票存在,賣票 ticket--
            System.out.println(Thread.currentThread().getName()+"-->正在賣第"+ticket+"張票");
            ticket--;
        }
    }

}

}
package com.itheima.demo08.Synchronized;

/*

模擬賣票案例
創建3個線程,同時開啟,對共享的票進行出售

*/
public class Demo01Ticket {

public static void main(String[] args) {
    //創建Runnable接口的實現類對象
    RunnableImpl run = new RunnableImpl();
    System.out.println("run:"+run);//run:com.itheima.demo08.Synchronized.RunnableImpl@58ceff1
    //創建Thread類對象,構造方法中傳遞Runnable接口的實現類對象
    Thread t0 = new Thread(run);
    Thread t1 = new Thread(run);
    Thread t2 = new Thread(run);
    //調用start方法開啟多線程
    t0.start();
    t1.start();
    t2.start();
}

}

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75600.html

相關文章

  • Java同步塊簡介

    摘要:同步塊用來避免競爭。實際需要那種同步塊視具體情況而定。在非同步的方法中的同步塊的例子如下所示示例使用同步塊構造器來標記一塊代碼是同步的。在同步構造器中用括號括起來的對象叫做監視器對象。他們的構造器引用同一個實例。 Java 同步塊(synchronized block)用來標記方法或者代碼塊是同步的。Java同步塊用來避免競爭。本文介紹以下內容: Java同步關鍵字(synchro...

    warnerwu 評論0 收藏0
  • @Java | Thread & synchronized - [ 線程同步鎖 基本使用]

    摘要:線程同步方法是通過鎖來實現,每個對象都有切僅有一個鎖,這個鎖與一個特定的對象關聯,線程一旦獲取了對象鎖,其他訪問該對象的線程就無法再訪問該對象的其他非同步方法對于靜態同步方法,鎖是針對這個類的,鎖對象是該類的對象。 對實現了Runnable或者Callable接口類,可以通過多線程執行同一實例的run或call方法,那么對于同一實例中的局部變量(非方法變量)就會有多個線程進行更改或讀取...

    Michael_Lin 評論0 收藏0
  • Java中synchronized關鍵字

    摘要:的關鍵字中的塊使用關鍵字進行標記。由于每個類只有一個類對象存在于中,因此全局同時只有一個線程能夠進入到同一個類的靜態同步方法中。同步代碼塊使這種期望成為可能。注意同步代碼塊如何在括號中接受一個對象。相同的實例被傳入兩個不同的線程實例中。 Java的synchronized塊標記一個方法或一個代碼塊為同步的。synchronized塊能用于防止出現競態條件。 Java的synchroni...

    lylwyy2016 評論0 收藏0
  • synchronized關鍵字使用詳解

    摘要:基本使用同步代碼塊同步代碼塊延時秒,方便后面測試作用代碼塊時,方法中的,是指調用該方法的對象。那么這個時候使用關鍵字就需要注意了推薦使用同步代碼塊,同步的代碼塊中傳入外部定義的一個變量。 簡述 計算機單線程在執行任務時,是嚴格按照程序的代碼邏輯,按照順序執行的。因此單位時間內能執行的任務數量有限。為了能在相同的時間內能執行更多的任務,就必須采用多線程的方式來執行(注意:多線程模式無法減...

    Jeffrrey 評論0 收藏0
  • java 關鍵字總結

    摘要:關鍵字總結有個關鍵字,它們是接下來對其中常用的幾個關鍵字進行概括。而通過關鍵字,并不能解決非原子操作的線程安全性。為了在一個特定對象的一個域上關閉,可以在這個域前加上關鍵字。是語言的關鍵字,用來表示一個域不是該對象串行化的一部分。 java 關鍵字總結 Java有50個關鍵字,它們是: abstract do implements private ...

    honmaple 評論0 收藏0
  • JAVA快速復習

    摘要:八種基本數據類型數組定義數組元素類型數組名元素類型元素個數和數組長度元素類型數組名元素類型元素元素元素元素內存的劃分寄存器本地方法區方法區棧內存存儲局部變量變量所屬作用域一旦結束變量自動釋放方法進棧局部變量屬于方法所以方法要先進棧堆內存存儲 八種基本數據類型 byte short int long boolean char float double JAVA數組 定義數組 元...

    cppowboy 評論0 收藏0

發表評論

0條評論

jlanglang

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<