成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

淺析Java多線程技術中所使用的方法

開發 后端
本文向您介紹了Java多線程編程中所用到的各種方法和這些方法的使用和作用,包括簡單的run()和start() 和相對復雜的wait()和notify()、notifyAll()等。

一、run()和start()

這兩個方法應該都比較熟悉,把需要并行處理的代碼放在run()方法中,start()方法啟動線程將自動調用 run()方法,這是由Java的內存機制規定的。并且run()方法必須是public訪問權限,返回值類型為void.

二、關鍵字Synchronized

這個關鍵字用于保護共享數據,當然前提是要分清哪些數據是共享數據。每個對象都有一個鎖標志,當一個線程訪問該對象時,被Synchronized修飾的數據將被“上鎖”,阻止其他線程訪問。當前線程訪問完這部分數據后釋放鎖標志,其他線程就可以訪問了。

public ThreadTest implements Runnable
  {
  public synchronized void run(){
  for(int i=0;i<10;i++)
  {
  System.out.println(" " + i);
  }
  }
  public static void main(String[] args)
  {
  Runnable r1 = new ThreadTest();
  Runnable r2 = new ThreadTest();
  Thread t1 = new Thread(r1);
  Thread t2 = new Thread(r2);
  t1.start();
  t2.start();
  }
  }

以上這段程序中的 i 變量并不是共享數據,也就是這里的Synchronized關鍵字并未起作用。因為t1,t2兩個線程是兩個對象(r1,r2)的線程。不同的對象其數據是不同的,所以r1和r2兩個對象的i變量是并不是共享數據。

當把代碼改成如下:Synchronized關鍵字才會起作用

Runnable r = new ThreadTest();
  Thread t1 = new Thread(r);
  Thread t2 = new Thread(r);
  t1.start();
  t2.start();

三、sleep()

使當前線程(即調用該方法的線程)暫停執行一段時間,讓其他線程有機會繼續執行,但它并不釋放對象鎖。也就是如果有Synchronized同步塊,其他線程仍然不同訪問共享數據。注意該方法要捕獲異常

比如有兩個線程同時執行(沒有Synchronized),一個線程優先級為MAX_PRIORITY,另一個為MIN_PRIORITY,如果沒有Sleep()方法,只有高優先級的線程執行完成后,低優先級的線程才能執行;但當高優先級的線程sleep(5000)后,低優先級就有機會執行了。

總之,sleep()可以使低優先級的線程得到執行的機會,當然也可以讓同優先級、高優先級的線程有執行的機會。

四、join()

join()方法使調用該方法的線程在此之前執行完畢,也就是等待調用該方法的線程執行完畢后再往下繼續執行。注意該方法也要捕獲異常。

五、yield()

它與sleep()類似,只是不能由用戶指定暫停多長時間,并且yield()方法只能讓同優先級的線程有執行的機會。

六、wait()和notify()、notifyAll()

這三個方法用于協調多個線程對共享數據的存取,所以必須在Synchronized語句塊內使用這三個方法。前面說過Synchronized 這個關鍵字用于保護共享數據,阻止其他線程對共享數據的存取。但是這樣程序的流程就很不靈活了,如何才能在當前線程還沒退出Synchronized數據塊時讓其他線程也有機會訪問共享數據呢?此時就用這三個方法來靈活控制。

wait()方法使當前線程暫停執行并釋放對象鎖標志,讓其他線程可以進入Synchronized數據塊,當前線程被放入對象等待池中。當調用 notify()方法后,將從對象的等待池中移走一個任意的線程并放到鎖標志等待池中,只有鎖標志等待池中的線程能夠獲取鎖標志;如果鎖標志等待池中沒有線程,則notify()不起作用。notifyAll()則從對象等待池中移走所有等待那個對象的線程并放到鎖標志等待池中。

【編輯推薦】

  1. 解析Java的多線程機制
  2. Java進階:Java多線程之ThreadLocal
  3. Java 5.0 多線程編程實踐
責任編輯:佚名 來源: 小科學家的博客
相關推薦

2009-06-29 18:08:51

Java多線程join方法

2010-02-01 17:25:09

Python多線程

2009-07-03 17:18:34

Servlet多線程

2009-08-12 18:04:44

編寫C#多線程

2009-06-29 18:32:52

Java多線程Synchronize

2021-09-11 15:26:23

Java多線程線程池

2011-04-08 10:36:38

MFC多線程

2010-03-03 17:44:07

Python多線程

2010-03-15 18:18:33

Java多線程

2016-11-10 16:30:22

Java多線程

2009-07-17 17:29:13

多任務多線程

2011-08-29 16:16:22

Lua函數多線程

2009-08-17 14:08:33

C#進度條使用

2011-08-31 16:30:19

Lua多線程

2009-08-21 11:31:59

異步和多線程的區別

2010-03-16 09:19:22

Java多線程

2011-06-24 11:03:31

Qt 多線程 線程

2011-06-24 11:12:39

Qt 多線程 線程

2015-09-10 09:30:54

Java多線程同步

2010-03-15 18:42:52

Java多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 三级国产三级在线 | 日韩免费一级 | 成人国产免费视频 | 欧美日韩亚洲成人 | 欧美国产精品久久久 | 国产精品成人国产乱一区 | 免费激情av | 91视频大全 | 亚洲视频免费观看 | 91新视频 | 欧美午夜视频 | 精品一区二区三区免费视频 | 最新高清无码专区 | 激情毛片 | 欧美成人免费在线视频 | 欧美不卡一区 | 国产福利视频网站 | 国产精品毛片无码 | 日本久久久一区二区三区 | 天天干b | 久久国产精品精品 | 国产福利在线播放麻豆 | 国产高清在线精品一区二区三区 | 亚洲成人一区二区三区 | xnxx 日本免费 | 国产精品色综合 | 极品一区| 羞羞的视频在线看 | 蜜桃五月天 | 日韩av高清 | 久久精品国产清自在天天线 | 久久精品亚洲国产奇米99 | 亚洲第一天堂 | 国产精品久久久久久吹潮 | 青青草一区 | 免费国产视频在线观看 | 乳色吐息在线观看 | 久久久久久中文字幕 | 色婷婷精品久久二区二区蜜臂av | 亚洲日韩欧美一区二区在线 | 日韩一区二区三区在线观看视频 |