成人免费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多線程線程池

2010-03-15 18:18:33

Java多線程

2011-04-08 10:36:38

MFC多線程

2010-03-03 17:44:07

Python多線程

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 多線程 線程

2015-09-10 09:30:54

Java多線程同步

2011-06-24 11:12:39

Qt 多線程 線程

2010-03-15 18:42:52

Java多線程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久草99 | 中文字幕人成人 | 另类二区 | 美女131mm久久爽爽免费 | 成人网av | 亚州综合一区 | av中文天堂 | 日韩中文不卡 | 国产一二区在线 | 激情五月婷婷在线 | 一区二区三区四区在线视频 | 99视频免费看 | 国产成人综合在线 | 国产精品2区 | 中文字幕欧美日韩一区 | 成人在线免费看 | 黄网免费 | 久久久久久毛片免费观看 | 国产成人免费视频网站高清观看视频 | 亚洲精品区 | 久久国产精品视频 | 久久夜视频 | 欧美13videosex性极品 | 国产91在线 | 亚洲 | 色姑娘av| 日本在线免费 | 精品国产乱码久久久久久丨区2区 | 成人免费大片黄在线播放 | 亚洲va欧美va天堂v国产综合 | 亚洲高清视频在线 | 日本一卡精品视频免费 | 久久久久国产精品免费免费搜索 | 人人干人人舔 | 日本在线一区二区三区 | 99re热精品视频 | 日本久久www成人免 成人久久久久 | 久久亚洲免费 | 在线免费视频一区 | 国内精品免费久久久久软件老师 | 韩日av片 | 国产精品欧美一区二区三区不卡 |