让各部份能同时被执行 - national taiwan university.ppt

让各部份能同时被执行 - national taiwan university.ppt

  1. 1、本文档共46页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
让各部份能同时被执行 - national taiwan university

Multithread 多執行緒 I/O Lecturer:曾學文 Process and Thread Process - 正在執行的應用程式 不同的行程會對應到不同的 系統資源 CPU時間 Multithread的概念特別針對CPU時間的分配 暫時閒置的CPU時間,用在執行應用程式的其他工作上 語法不難,難在掌控 執行先後順序 資源維護 執行緒的生命週期 設計背景 雖然說一次可以處理多個執行緒 不過在同一個時間點真正執行的還是只有一個 (例外:多CPU系統可以執行多個) 處理多個執行緒時 一次只有一個執行緒在執行(Running) 其他執行緒在Runnable區塊中等待 執行先後順序會依照執行緒的優先權來判定 沒執行的在Runnable區塊中等待下一次優先權的判定 Thread類別 java.lang.Thread public class Thread extends Object implements Runnable 提供的基本方法 static yield() 讓目前running的暫停, 讓runnable的擇一跑 static sleep() 讓目前running的睡一個設定的時間 start() 啟動, 之後JVM可啟動該thread的run() setPriority() setPriority(MAX_PRIORITY):給最大優先權 setPriority(MIN_PRIORITY):給最小優先權 setPriority(NORM_PRIORITY):預設的優先權 簡單程式範例 (MyThread.java) public class MyThread extends Thread{ MyThread(String n) { super(n); } public void run() { String tname = super.getName(); try { for(int i = 1; i=5000;i++) { System.out.println(tname+ +i+ +Math.random()); } } catch(Exception e) { System.out.println(error); } } } 說明 新的執行緒物件(new MyThread) 經由start()方法進入Runnable 區準備執行 Runnable區每個執行緒都有優先權及時間順序,系統會近行排程 排程後將選出來的執行緒丟入Running區執行 此時會觸發執行緒run()方法,執行實作內容(寫在run()內的程式碼) 若執行緒未執行完成(例如取得的CPU時間已到卻還沒完成工作,或是程式呼叫了特定的方法) ,或是執行wait(),將會觸發Blocking event並進入Blocked區 被封鎖的執行緒解除封鎖(Unblocked)或者是或別的程式中呼叫了notify()方法之後,將再進入Runnable pool中等待下一次執行 若程式中呼叫了yield()方法(讓與),則是將執行權先給其他執行緒執行,不過其本身仍然還是在Runnable中 不能多重繼承時 (MyThread2.java) public class MyThread2 implements Runnable { int i; public void run() { i = 0; while (true) { System.out.println(Thread.currentThread().getName() + + (++i) + +Math.random()); if ( i == 5000 ) break; } } } 如果執行緒間彼此有同步的考量 (MyThread3.java) public class MyThread3 implements Runnable{ static int max=0; public void run() { for(int i = 1; i=5000;i++) { int tmp=max; System.out.println(Thr

文档评论(0)

yanpizhuang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档