freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

java2面向?qū)ο蟪绦蛟O(shè)計基礎(chǔ)(中)ppt-資料下載頁

2024-10-16 16:16本頁面
  

【正文】 】 使用 sleep方法使線程休眠,程序如下。 ? class EvenOdd extends Thread ? { ? private int f,delay。 ? public EvenOdd(int first,int interval) ? { ? f=first。 ? delay=interval。 ? } ? public void run() ? { ? try ? { ? for(int i=f。i=100。i+=2) ? { ? (().getName()+ +i)。 ? sleep(delay)。 ? } 線程休眠 ? } ? catch(InterruptedException e) ? { ? ()。 ? } ? } ? } ? class Test ? { ? public static void main(String []args)throws InterruptedException ? { ? EvenOdd th1=new EvenOdd(1,20)。 ? EvenOdd th2=new EvenOdd(0,30)。 ? ()。 ? ()。 ? ()。 ? ()。 ? (Main thread done)。 ? } ? } 線程休眠 ? 運行結(jié)果如圖 65所示。 ? 圖 65 運行結(jié)果 (例 ) 中斷線程 ? 中斷一個線程意味著在完成其任務(wù)以前,停止線程正在進行的工作,即有效地中止當(dāng)前操作。線程中斷后是等待新的任務(wù)還是繼續(xù)進行下一步操作將取決于應(yīng)用程序。 ? 這里就必須注意的問題提出了一些建議。 ? (1) 不要使用 ? 盡管它的確可以中止一個正在運行的線程,由于它的安全問題而遭到了開發(fā)人員普遍的反對。這也可能意味著在未來的Java版本中它可能不會出現(xiàn)。 ? (2) 不建議使用 ? ()方法不會中斷一個正在運行的線程。這一方法實際上完成的是,在線程受到阻塞時拋出一個中斷信號,這樣線程就得以退出阻塞的狀態(tài)。 中斷線程 ? 【 例 】 通過 ()中斷線程舉例,程序如下。 ? class Example1 extends Thread ? { ? public static void main( String args[] ) throws Exception ? { ? Example1 thread = new Example1()。 ? ( Starting thread... )。 ? ()。 ? ( 3000 )。 ? ( Interrupting thread... )。 ? ()。 ? ( 3000 )。 ? ( Stopping application... )。 ? ( 0 )。 ? } ? public void run() ? { ? while ( true ) 中斷線程 ? { ? ( Thread is running... )。 ? long time = ()。 //當(dāng)前系統(tǒng)毫秒級單位的時間,返回長整型的數(shù) ? while ( ()time 1000 ) ? { ? } ? } ? } ? } ? 運行結(jié)果如圖 67所示。 ? 代碼中通過讓 thread 線程 sleep,再使用 interrupt方法來中斷線程,但實際上從運行結(jié)果上看線程并沒有中斷。 中斷線程 ? 圖 67 運行結(jié)果 (例 ) Java的多線程實例 ? Java語言中,線程有如下特點。 ? (1) 在一個程序中而言,主線程的執(zhí)行位置就是 main。而其他線程執(zhí)行的位置,程序員是可以自定義的。 ? (2) 每個線程執(zhí)行其代碼的方式都是依次順序執(zhí)行的。 ? (3) 一個線程執(zhí)行其代碼是與其他線程獨立開來的。如果諸線程之間又相互協(xié)作的話,就必須采用一定的交互機制。 ? (4) 前面已經(jīng)說過,線程是共享地址空間的,如果控制不當(dāng),這里很有可能出現(xiàn)死鎖。關(guān)于死鎖的概念將在下節(jié)介紹。 Java的多線程實例 ? 【 例 】 繼承 Thread類舉例,通過它講述多線程的作用機制。程序如下。 ? class MultiThread ? { ? public static void main(String[] args) ? { ? MyThread mt=new MyThread()。 ? new Thread(mt).start()。 ? new Thread(mt).start()。 ? new Thread(mt).start()。 ? new Thread(mt).start()。 ? } ? } ? class MyThread extends Thread ? { ? int index=100。 ? public void run() Java的多線程實例 ? { ? while(true) ? { ? if(index0) ? { ? try ? { ? (10)。//讓線程等待 10毫秒 (().getName() +賣了第 +index+張飯票 )。 ? index。 ? } ? catch(InterruptedException e) ? { ? ()。//打印異常出現(xiàn)的軌跡 ? } ? } ? } ? } ? } ? 運行結(jié)果如圖 69所示。 Java的多線程實例 ? 圖 69 運行結(jié)果 (例 ) 線程的同步與死鎖 ? 線程的同步 ? 死鎖 ? 線程同步示例 ? 設(shè)置線程優(yōu)先級示例 線程的同步與死鎖 ? 在使用線程時,往往會出現(xiàn)意料不到的結(jié)果,為了解決這些問題,必須了解 Java中線程的死鎖和同步的問題。 線程的同步 ? 通常來說,同時運行的線程需要共同數(shù)據(jù),在這種情況下,就需要考慮其他線程對當(dāng)前線程的影響 。 ? 在 Java中,引入了對象互斥鎖的概念,來保證共享數(shù)據(jù)操作的完整性。每個對象都對應(yīng)一個可稱為“互斥鎖”的標(biāo)記,這個標(biāo)記用來保證在任一時刻,只能有 — 個線程訪問該對象。關(guān)鍵字 synchronized來與對象的互斥鎖聯(lián)系。當(dāng)某個對象用synchronized修飾時,表明該對象在任一時刻只能由一個線程訪問。 線程的同步 ? 引入互斥鎖之后,需要使用 wait(), notify()和 notifyAll()方法來同步線程的執(zhí)行,這些方法的使用說明如下。 ? (1) wait(), notify()和 notifyAll()三種方法必須在已經(jīng)持有鎖的情況下執(zhí)行,只能出現(xiàn)在 synchronized作用的范圍內(nèi)。 ? (2) wait()方法的作用是釋放已持有的鎖,進入 wait()隊列。 ? (3) notify()的作用是喚醒 wait隊列中的第一個線程,并將該線程移入互斥鎖申請隊列。 ? (4) notifyAll()方法的作用是喚醒 wait隊列中的所有的線程,并將這些線程移入互斥鎖申請隊列。 線程的同步 ? Java中實現(xiàn)互斥鎖是通過使用 synchronized關(guān)鍵字,它包括兩種用法: synchronized方法和 synchronized塊 (也說同步方法和同步塊 )。 ? 1. synchronized 方法 ? 通過在方法聲明中加入 synchronized關(guān)鍵字來聲明synchronized 方法。使用的格式為: ? public synchronized void accessVal(int newVal)。 線程的同步 ? 2. synchronized 塊 ? 通過 synchronized關(guān)鍵字來聲明 synchronized塊。語法如下: ? synchronized(syncObject) ? { ? //允許訪問控制的代碼 ? } 死鎖 ? 多線程在使用互斥機制實現(xiàn)同步的時候,存在“死鎖”的潛在危險。如果多個線程都是處于等待狀態(tài)而無法被喚醒時,就構(gòu)成死鎖。例如一個線程進入對象 ObjA上的監(jiān)視器,而另一個線程進入對象 ObjB上的監(jiān)視器。如果 ObjA中的線程試圖調(diào)用 ObjB上的任何 synchronized 方法,就將發(fā)生死鎖。此時處于等待狀態(tài)的多個線程占用系統(tǒng)資源,但又無法運行,因此不會釋放自己的資源,由于系統(tǒng)資源有限,程序停止運行。 ? Java技術(shù)既不能發(fā)現(xiàn)死鎖也不能避免死鎖。所以編程時應(yīng)注意死鎖問題,盡量避免。 死鎖 ? 如何去解決死鎖的問題,看起來是一件很頭痛的事,因為它涉及 CPU的時間片的分配等問題。最有效方法還是避免死鎖的發(fā)生,一般有以下兩種方法: ? 線程因為某個條件未滿足而受阻,不能讓其繼續(xù)占有資源。 ? 如果有多個對象需要互斥訪問,應(yīng)確定線程獲得鎖的順序。 線程同步示例 ? 【 例 】 線程同步示例。 ? public class Producer extends Thread { ? private CubbyHole cubbyhole。 ? private int number。 ? public Producer(CubbyHole c, int number) { ? cubbyhole = c。 ? = number。 ? } ? public void run() { ? for (int i = 0。 i 10。 i++) { ? (i)。 ? (Producer + ? + put: + i)。 ? try { ? sleep((int)(() * 100))。 ? } catch (InterruptedException e) { } ? } ? } ? } 線程同步示例 ? public class CubbyHole { ? private int contents。 ? private boolean available = false。 ? public synchronized int get() { ? while (available == false) { ? try { ? wait()。 ? } catch (InterruptedException e) { } ? } ? available = false。 ? notifyAll()。 ? return contents。 ? } ? public synchronized void put(int value) { ? while (available == true) { ? try { ? wait()。 ? } catch (InterruptedException
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1