亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

java多線程編程之使用Synchronized塊同步變量

2019-11-26 15:43:52
字體:
來源:轉載
供稿:網友

下面的代碼演示了如何同步特定的類方法:

復制代碼 代碼如下:

package mythread;

public class SyncThread extends Thread
{
 private static String sync = "";
 private String methodType = "";

 private static void method(String s)
 {
  synchronized (sync)
  {
sync = s;
System.out.println(s);
while (true);
  }
 }
 public void method1()
 {
  method("method1");
 }
 public static void staticMethod1()
 {
  method("staticMethod1");
 }
 public void run()
 {
  if (methodType.equals("static"))
staticMethod1();
  else if (methodType.equals("nonstatic"))
method1();
 }
 public SyncThread(String methodType)
 {
  this.methodType = methodType;
 }
 public static void main(String[] args) throws Exception
 {
  SyncThread sample1 = new SyncThread("nonstatic");
  SyncThread sample2 = new SyncThread("static");
  sample1.start();
  sample2.start();
 }
}

運行結果如下:

復制代碼 代碼如下:

method1
staticMethod1

看到上面的運行結果很多讀者可能感到驚奇。在上面的代碼中method1和staticMethod1方法使用了靜態字符串變量sync進行同步。這兩個方法只能有一個同時執行,而這兩個方法都會執行014行的無限循環語句。因此,輸出結果只能是method1和staticMethod1其中之一。但這個程序將這兩個字符串都輸出了。
出現這種結果的愿意很簡單,我們看一下012行就知道了。原來在這一行將sync的值改變了。在這里要說一下Java中的String類型。String類型和Java中其他的復雜類型不同。在使用String型變量時,只要給這個變量賦一次值,Java就會創建個新的String類型的實例。如下面的代碼所示:

復制代碼 代碼如下:

String s = "hello";
System.out.println(s.hashCode());
s = "world";
System.out.println(s.hashCode());

在上面的代碼中。第一個s和再次賦值后的s的hashCode的值是不一樣的。由于創建String類的實例并不需要使用new,因此,在同步String類型的變量時要注意不要給這個變量賦值,否則會使變量無法同步。
由于在012行已經為sync創建了一個新的實例,假設method1先執行,當method1方法執行了013行的代碼后,sync的值就已經不是最初那個值了,而method1方法鎖定的仍然是sync變量最初的那個值。而在這時,staticMethod1正好執行到synchronized(sync),在staticMethod1方法中要鎖定的這個sync和method1方法鎖定的sync已經不是一個了,因此,這兩個方法的同步性已經被破壞了。
解決以上問題的方法當然是將012行去掉。在本例中加上這行,只是為了說明使用類變量來同步方法時如果在synchronized塊中將同步變量的值改變,就會破壞方法之間的同步。為了徹底避免這種情況發生,在定義同步變量時可以使用final關鍵字。如將上面的程序中的005行可改成如下形式:

復制代碼 代碼如下:

private final static String sync = "";

使用final關鍵字后,sync只能在定義時為其賦值,并且以后不能再修改。如果在程序的其他地方給sync賦了值,程序就無法編譯通過。在Eclipse等開發工具中,會直接在錯誤的地方給出提示。
我們可以從兩個角度來理解synchronized塊。如果從類方法的角度來理解,可以通過類變量來同步相應的方法。如果從類變量的角度來理解,可以使用synchronized塊來保證某個類變量同時只能被一個方法訪問。不管從哪個角度來理解,它們的實質都是一樣的,就是利用類變量來獲得同步鎖,通過同步鎖的互斥性來實現同步。
注意:在使用synchronized塊時應注意,synchronized塊只能使用對象作為它的參數。如果是簡單類型的變量(如int、char、boolean等),不能使用synchronized來同步。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品视频在线播放| 欧美性高潮在线| 久久久中文字幕| 亚洲精品国精品久久99热一| 日韩国产欧美精品一区二区三区| 亚洲男子天堂网| 日韩av在线直播| 欧美亚洲国产精品| 国产精品成人久久久久| 日本亚洲欧美三级| 欧美激情国产精品| 日韩电影免费观看在线| 91精品国产自产91精品| 久久777国产线看观看精品| 日韩欧美一区二区三区| 亚洲人永久免费| 在线看日韩av| 日韩精品中文字幕视频在线| 色噜噜久久综合伊人一本| 国内精品久久久久久| 孩xxxx性bbbb欧美| 亚洲精选在线观看| 欧美日韩国产精品| 久久理论片午夜琪琪电影网| 亚洲人成电影在线播放| 国产91精品青草社区| 亚洲精品国产精品国自产在线| 国产在线精品播放| 日韩精品福利在线| 欧美亚洲另类制服自拍| 国产精品美女免费| 97精品国产aⅴ7777| 亚洲国产精品成人av| 国产一区二区黑人欧美xxxx| 久久精品国产精品| 亚洲国产日韩欧美在线动漫| 精品国产成人av| 国产91在线播放精品91| 久久国产精品影片| 日韩av第一页| 国产精品视频网站| 成人黄色午夜影院| 色婷婷**av毛片一区| 久久精品一偷一偷国产| 国产成人一区二区三区电影| 亚洲国产成人精品女人久久久| 在线播放精品一区二区三区| 国产69精品久久久久9| 麻豆国产va免费精品高清在线| 亚洲一区二区免费在线| 欧美在线精品免播放器视频| 成人av电影天堂| 国产精品久久久久久久久久ktv| 激情懂色av一区av二区av| 国产亚洲日本欧美韩国| 成人一区二区电影| 国产精品久久久久久超碰| 欧美激情久久久久久| 亚洲另类激情图| 中文字幕国产亚洲2019| www.久久久久久.com| 青草青草久热精品视频在线网站| 久久久亚洲精品视频| 亚洲精品国产精品自产a区红杏吧| 久久久久久久久中文字幕| 日本91av在线播放| www.久久久久| 国产精品第一视频| 日韩有码片在线观看| 久久久999精品| 欧美性感美女h网站在线观看免费| 国产精品福利无圣光在线一区| 国产精品色视频| 性欧美激情精品| 亚洲尤物视频网| 日韩精品www| 日韩小视频在线观看| 日韩欧美亚洲成人| 久久成年人免费电影| 国产视频在线一区二区| 深夜福利日韩在线看| 日本免费久久高清视频| 国产激情综合五月久久| 一道本无吗dⅴd在线播放一区| 国产日韩换脸av一区在线观看| 欧美日韩在线观看视频| 揄拍成人国产精品视频| 欧美日韩亚洲精品一区二区三区| 国产精品一区二区三区久久| 97人洗澡人人免费公开视频碰碰碰| 欧美夜福利tv在线| 欧美福利视频在线观看| 国产精品丝袜白浆摸在线| 中文字幕亚洲精品| 国产伦精品一区二区三区精品视频| 国产99久久精品一区二区永久免费| 成人久久一区二区| 欧美性猛交xxxxx免费看| 欧美劲爆第一页| 97在线视频精品| 欧美成aaa人片免费看| 亚洲精品www久久久| 久久久久久久久久久av| 午夜免费日韩视频| 亚洲国产精品久久久久久| 国产女同一区二区| 久久九九国产精品怡红院| 91成人在线观看国产| 在线播放国产一区二区三区| 日韩黄色av网站| 国产精品一区二区三区毛片淫片| 欧美精品久久久久久久免费观看| 欧美裸体xxxx极品少妇| 日韩久久精品电影| 91欧美精品午夜性色福利在线| 久久久999国产精品| 日韩精品中文字幕有码专区| 国产一区二区日韩精品欧美精品| 福利微拍一区二区| 国产精品一区二区三| 夜夜狂射影院欧美极品| 中文字幕日韩在线观看| 亚洲欧洲日产国产网站| 国产美女91呻吟求| 欧美巨乳在线观看| 亚洲a区在线视频| 精品一区二区三区电影| 久久躁狠狠躁夜夜爽| 黑人精品xxx一区| 欧美专区第一页| 国产日产欧美a一级在线| 国产成人精品在线观看| 国产精品爽爽ⅴa在线观看| 亚洲第一色在线| 深夜福利91大全| 国产精品久久久久不卡| 日韩精品久久久久| 日韩经典一区二区三区| 中文字幕精品—区二区| 一区二区三区国产视频| 久久久久亚洲精品国产| 欧美精品久久久久a| 欧美在线视频免费播放| 日韩av理论片| 欧美性一区二区三区| 日本久久精品视频| www.久久撸.com| 国产精品久久久久99| 国产视频观看一区| 影音先锋日韩有码| 萌白酱国产一区二区| 亚洲国产精彩中文乱码av在线播放| 欧美激情精品久久久久久大尺度| 成人写真福利网| 欧美日韩在线视频一区二区| 国产在线拍揄自揄视频不卡99| 亚洲精品国产电影| 日韩精品免费在线视频| 亚洲欧洲在线免费| 91成人性视频| 精品国产一区av| 国产精品va在线播放我和闺蜜| 亚洲精品中文字幕av| 亚洲爱爱爱爱爱|