多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > php教程 > 原創Java多線程詳解(一)

原創Java多線程詳解(一)

來源:程序員人生   發布時間:2014-12-13 08:41:05 閱讀次數:2418次

只看書不實踐是不行的。來實踐1下~~~~~~(援用請指明來源)

 

先看看百科對多線程的介紹

http://baike.baidu.com/view/65706.htm?fr=aladdin

 

Java對多線程的支持

Java創建多線程的3種經常使用方法:

    1)繼承Thread類

重寫Thread類的run方法,創建Thread子類實例,啟動線程。

例如:

/* * @author wxismeit@163.com wangxu */ public class TreadOfextends extends Thread{ private int i; //重寫run()方法 public void run(){ for(i=0; i<50; i++){ System.out.println(getName() + " " + i); //繼承Thread類時直接使用this便可獲得當前線程 } } public static void main(String[] args) { System.out.println(Thread.currentThread().getName()); for(int i=0; i<50; i++){ if(i == 10){ //直接通過創建類對象來調用start()方法 new TreadOfextends().start(); new TreadOfextends().start(); } } } }


 

      2)實現Runnable接口

重寫run()方法,創建Runnable實例作為Thread的target。

例如:

public class ThreadOfRun implements Runnable { private int i; //實現Runnable接口中的run()方法 public void run() { for(i=0; i<50; i++) { System.out.println(Thread.currentThread().getName() + " " + i); //通過實現接口來實現多線程 就不能通過this關鍵字來獲得當前進程 } } public static void main(String[] args) { for(int i=0; i<50; i++) { System.out.println(Thread.currentThread().getName() + " " + i); if(i == 10) { ThreadOfRun tor = new ThreadOfRun(); //此處需要通過Thread的構造方法來new線程 new Thread(tor , "線程1").start(); new Thread(tor , "線程2").start(); } } } }


          3)Java 5以后可以通過更強大的手段――實現Callable接口

使用FutureTask對象作為Thread的對象的target創建并啟動新線程

import java.util.concurrent.Callable; import java.util.concurrent.FutureTask; public class ThreadOfCallble implements Callable<Integer> { //支持泛型 public Integer call() throws Exception { int i; for(i=0; i<50; i++) { System.out.println(Thread.currentThread().getName() + " " + i); } return i;//有返回值 } public static void main(String[] args) { //創建Callable對象 ThreadOfCallble toc = new ThreadOfCallble(); //通過FutureTask來包裝Callable對象 FutureTask<Integer> ft = new FutureTask<Integer>(toc); for(int i=0; i<50; i++) { if(i ==10) { new Thread(ft , "NewThread").start(); } } try { //得到新線程的返回值 System.out.println("子線程的返回值 : " + ft.get()); }catch(Exception e) { e.printStackTrace(); } } }


3種方式的對照 : 后兩種方法非常合適多個相同的線程來處理同1份資源的情況,可以將CPU,代碼和數據分開,比較符合面向對象的思想,而且還可以繼承其他類,所以1般采取后兩種方法。

 

線程的生命周期 : 新建和就緒狀態 ――>運行和阻塞狀態――>線程死亡(不可復活)。

如圖:(看不到請拖動圖片)

 

      join線程

當在某個程序履行中調用其他線程的join方法時,條用線程將被阻塞,直至被join線程履行完為止。

<pre class="java" name="code">public class ThreadOfjoin extends Thread { public ThreadOfjoin(String name) { super(name); } public void run() { for(int i=0; i<50; i++) { System.out.println(getName()); } } public static void main(String[] args) { new ThreadOfjoin("NewThread").start(); for(int i=0; i<50; i++) { if(i == 10) { ThreadOfjoin toj = new ThreadOfjoin("JoinedThread"); toj.start(); try { toj.join();//主線程調用了toj的join方法,需要等toj履行完主線程才能履行 } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println(Thread.currentThread().getName()); } } }


未完待續  : 線程優先級,線程同步,互斥鎖,同步鎖,死鎖,線程通訊。

評論區留下Email可以取得《Java多線程設計模式》PDF版(通過網絡爬蟲小程序  自動匹配抓取你的Email并自動發送給你)

 

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 亚洲手机在线手机观看高清hd | 波多野结衣在线播放视频 | 羞羞网页登界面入口 | 亚洲一二三区在线观看 | 美女无遮挡免费视频观看网站 | 一级做a爱过程免费视频日本 | 欧美一级毛片无遮挡 | 日本欧美做爰全免费的视频 | 好好的曰www视频在线观看 | 欧洲美女高清一级毛片 | 最近中文字幕大全高清在线 | 国产精品日产三级在线观看 | 亚洲图片综合网 | 色福利在线| 91在线亚洲精品一区 | 亚洲精品日韩一区二区 | 国产尤物在线观看 | 一级特黄特黄毛片欧美的 | 国产精品成人久久久 | 精品国产一区二区三区2021 | 欧美系列第一页 | 亚洲另类春色小说 | 麻豆天堂 | 亚洲欧美综合乱码精品成人网 | 午夜视频啪啪 | 中文字幕视频免费在线观看 | 日本h在线精品免费观看 | 国产品精人成福利视频 | 欧美激情在线精品一区二区 | 永久免费精品视频 | 最近最新的免费中文字幕 | a网站在线观看免费网站 | 波多野结衣午夜 | 九色国产 | 国内精自视频品线六区免费 | 动漫美女口工h福利动画网站 | 亚洲精品天堂在线观看 | 在线播放精品视频 | 在线免费欧美 | 久久久久国产精品嫩草影院 | 亚洲婷婷影院 |