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

正文內(nèi)容

java程序設(shè)計教程與實驗applet編程、多媒體與多線程、jdbcppt(已改無錯字)

2022-11-16 16:18:03 本頁面
  

【正文】 ? 下一頁 上一頁 返回 開始 Java的 Applet編程 74 線程的生命周期及控制 線程有四個狀態(tài): 創(chuàng)建、可運(yùn)行、不可運(yùn)行、死亡 。 下一頁 上一頁 返回 開始 Java的 Applet編程 75 ?1. 創(chuàng)建狀態(tài) (new Thread) 執(zhí)行下列語句時,線程就處于創(chuàng)建狀態(tài): Thread myThread = new MyThreadClass( )。 當(dāng)一個線程處于創(chuàng)建狀態(tài)時,它僅僅是一個空的線程對象,系統(tǒng)不為它分配資源。 ?2. 運(yùn)行狀態(tài) ( Runnable ) Thread myThread = new MyThreadClass( )。 myThread. start( ) 。 當(dāng)一個線程處于可運(yùn)行狀態(tài)時,系統(tǒng)為這個線程分配了它需的系統(tǒng)資源,安排其運(yùn)行并調(diào)用線程運(yùn)行方法,這樣就使得該線程處于可運(yùn)行 ( Runnable )狀態(tài)。需要注意的是這一狀態(tài)并不是運(yùn)行中狀態(tài)( Running ), 因為線程也許實際上并未真正運(yùn)行。由于很多計算機(jī)都是單處理器的,所以要在同一時刻運(yùn)行所有的處于可運(yùn)行狀態(tài)的線程是不可能的,Java的運(yùn)行系統(tǒng)必須實現(xiàn)調(diào)度來保證這些線程共享處理器。 下一頁 上一頁 返回 開始 Java的 Applet編程 76 ? 3. 不可運(yùn)行狀態(tài)( Not Runnable) 進(jìn)入不可運(yùn)行狀態(tài)的原因有如下幾條: 1) 調(diào)用了 sleep() 方法 。 2) 調(diào)用了 suspend() 方法 。 3) 為等候一個條件變量,線程調(diào)用 wait() 方法 。 4) 輸入輸出流中發(fā)生線程阻塞 。 不可運(yùn)行狀態(tài)也稱為 阻塞狀態(tài) ( Blocked)。 因為某種原因(輸入 /輸出、等待消息或其它阻塞情況),系統(tǒng)不能執(zhí)行線程的狀態(tài)。這時即使處理器空閑,也不能執(zhí)行該線程。 ? 4. 死亡狀態(tài)( Dead) 線程的終止一般可通過兩種方法實現(xiàn):自然撤消( 線程執(zhí)行完 )或是被停止( 調(diào)用 stop()方法 )。目前不推薦通過調(diào)用 stop()來終止線程的執(zhí)行,而是讓線程執(zhí)行完。 下一頁 上一頁 返回 開始 Java的 Applet編程 78 多線程的互斥與同步 ?1)線程間的資源互斥共享 ? 通常,一些同時運(yùn)行的線程需要共享數(shù)據(jù)。如果線程只是讀取這個共享的數(shù)據(jù),則不必阻止多個線程同時訪問該數(shù)據(jù)。但是,在多個線程共享同一個對象,并且一個或多個線程會修改該對象時,每個線程就必須要考慮其它與它一起共享數(shù)據(jù)的線程的狀態(tài)與行為,否則的話就不能保證共享數(shù)據(jù)的一致性,從而也就不能保證程序的正確性。 這個共享的數(shù)據(jù)區(qū)就是一個臨界區(qū)。 首先觀察下面例題所出現(xiàn)的問題 。 下一頁 上一頁 返回 開始 Java的 Applet編程 79 ? 【 例 】 模擬打電話程序,一個電話接聽者類通過線程實現(xiàn)若干打電話者。 下一頁 上一頁 返回 開始 Java的 Applet編程 80 ? 在 Java語言中,引入了 “ 對象互斥鎖 ” 的概念(又稱為監(jiān)視器、管程)來實現(xiàn)不同線程對共享數(shù)據(jù)操作的同步。這個標(biāo)記用來保證在任一時刻,只能有一個線程訪問該對象。即, “ 對象互斥鎖 ” 阻止多個線程同時訪問同一共享資源 。 ? 在 Java語言中,有兩種方法可以實現(xiàn) “ 對象互斥鎖 ” : ? ( 1)用關(guān)鍵字 volatile來聲明一個共享數(shù)據(jù)(變量); ? ( 2)用關(guān)鍵字 synchronized來聲明一個操作共享數(shù)據(jù)的方法或一段代碼。 ? 一般情況下,都使用 synchronized關(guān)鍵字在方法的層次上實現(xiàn)對共享資源操作的同步,很少使用 volatile關(guān)鍵字聲明共享變量。 下一頁 上一頁 返回 開始 Java的 Applet編程 81 ? 對象鎖機(jī)制 格式 1: synchronized(臨界區(qū)對象 ) { //訪問臨界區(qū)對象的 “ 關(guān)鍵 ” 代碼片斷 , 又稱同步代碼塊 } 格式 2: 同步化方法 。 在方法的前面加上 synchronized。 如: public synchronized void add() {………… } 對于實例方法 , 這種格式其實是如下的第一種格式的簡化寫法: public void add() { synchronized(this) {………… } } 下一頁 上一頁 返回 開始 Java的 Applet編程 82 ? Case: 引入互斥鎖機(jī)制修改例 (模擬打電話程序,一個電話接聽者類通過線程實現(xiàn)若干打電話者。 ) 下一頁 上一頁 返回 開始 Java的 Applet編程 83 ? 線程之間需要相互協(xié)作,共同完成一些任務(wù)這就是線程之間的同步。 ? 考慮經(jīng)典的生產(chǎn)者和消費(fèi)者協(xié)同問題: ? 生產(chǎn)者線程負(fù)責(zé)將數(shù)據(jù)寫入大小固定的緩沖區(qū),而消費(fèi)者線程則從緩沖區(qū)取出數(shù)據(jù)來使用。生產(chǎn)者線程必須在緩沖區(qū)未滿時,才可寫入數(shù)據(jù),而消費(fèi)者線程只有在緩沖區(qū)非空時才能取走數(shù)據(jù)。這樣就要求生產(chǎn)者在緩沖區(qū)已滿的情形下必須等待,而一旦緩沖區(qū)可寫數(shù)據(jù)時,又將其喚醒繼續(xù)寫入數(shù)據(jù);同樣地,消費(fèi)者也有一個等待和喚醒的過程。由此可見,線程的等待和喚醒也是一種實現(xiàn)線程間同步的方法。 下一頁 上一頁 返回 開始 Java的 Applet編程 84 ? 出于代碼的安全性和健壯性的考慮, java放棄了使用原來的 suspend、 resume方法來處理線程的掛起等待和喚醒繼續(xù),取而代之則是從 Object類繼承而來的: ? wait() //這個方法可以使線程一直等待,直到其他線程調(diào)用 notify(或 notifyAll)將其喚醒。 ? notify() //喚醒一個等待同一個管程鎖的線程,如果同一管程鎖下有多個線程處于睡眠等待狀態(tài),則隨機(jī)地挑出一個等待線程將其喚醒。 ? notifyAll()//喚醒所有等待同一管程鎖的線程,這些喚醒后的線程同樣也要擁有管程才能繼續(xù)執(zhí)行。 ? 這三個方法 必須在 synchronized代碼塊中調(diào)用 ,否則會出現(xiàn) IllegalMonitorStateException異常。 下一頁 上一頁 返回 開始 Java的 Applet編程 85 Case: 無 wait(),notify()。 Case: 加入 wait(),notify()。 分析 【 例 】 與 【 例 】 下一頁 上一頁 返回 開始 Java的 Applet編程 86 ? 若一個 Java程序的所有線程都因為申請不到它們所需要的資源而全部進(jìn)入 “ 阻塞 ” 狀態(tài)時,該 Java程序?qū)⒈粧炱?,程序再不能繼續(xù)前進(jìn),這種現(xiàn)象稱為死鎖。 ? 當(dāng)不同的線程分別占用對方需要的同步資源不放棄,都在等待對方放棄自己需要的同步資源,從而形成了死鎖。 ? 若不配套使用使用 wait()/notifyAll(), 就很容易造成死鎖。 下一頁 上一頁 返回 開始 Java的 Applet編程 87 線程間的其它通信方式 ? 前面的例題都是通過共享中間類實現(xiàn)了線程間的通信。線程間的通信還可以通過管道流來實現(xiàn)。下面的例子里有兩個線程在運(yùn)行,一個寫線程往管道流中輸出信息,一個讀線程從管道流中讀入信息。 ? 【 例 】 利用管道流連接兩個線程間的通信。 下一頁 上一頁 返回 開始 Java的 Applet編程 88 守護(hù)線程 ? Java程序中可以包含守護(hù)線程和非守護(hù)線程。所謂守護(hù)線程,是專門為其它線程提供服務(wù)的線程,故又稱為服務(wù)線程。Java的垃圾收集機(jī)制的某些實現(xiàn)就使用了守護(hù)線程。非守護(hù)線程包括常規(guī)的用戶線程或諸如用于處理 GUI事件的事件調(diào)度線程。守護(hù)線程與其它線程的區(qū)別是,守護(hù)線程不會阻止程序的終止,如果守護(hù)線程是唯一運(yùn)行著的線程 ,程序會自動退出。 ? main()所在的主線程是否運(yùn)行結(jié)束取決于用戶線程。 ? 通過調(diào)用線程的 setDaemon方法可以實現(xiàn)用戶線程與守護(hù)線程之間的轉(zhuǎn)換。它的方法頭如下: ? public void setDaemon(boolean on) ? 當(dāng) on為 true時,將線程轉(zhuǎn)成守護(hù)線程, on為 false時轉(zhuǎn)成用戶線程。 第 11章 利用 JDBC訪問數(shù)據(jù)庫 下一頁 上一頁 返回 開始 Java的 Applet編程 90 主要內(nèi)容 ? 數(shù)據(jù)庫與 JDBC概述 ? 數(shù)據(jù)庫概述 ? SQL ? 什么是 JDBC ? JDBC與 ODBC ? ODBC數(shù)據(jù)源設(shè)置 ? 通過 JDBC訪問數(shù)據(jù)庫 ? JDBC數(shù)據(jù)庫驅(qū)動程序 ? JDBC API ? 編寫 JDBC程序的一般步驟 ? ATM應(yīng)用程序 下一頁 上一頁 返回 開始 Java的 Applet編程 91 數(shù)據(jù)庫與 JDBC概述 ? 數(shù)據(jù)庫概述 ? 數(shù)據(jù)庫是一個有組織的數(shù)據(jù)集合,它由一個或多個表組成。每一個表中都存儲了對一類對象的數(shù)據(jù)描述。數(shù)據(jù)庫管理系統(tǒng)( database management system,DBMS)以一種與數(shù)據(jù)庫格式一致的方式,提供了存儲和組織數(shù)據(jù)的機(jī)制。 ? 當(dāng)前最流行的數(shù)據(jù)庫是關(guān)系型數(shù)據(jù)庫,它是將數(shù)據(jù)表示為表的集合,通過建立簡單表之間的關(guān)系來定義結(jié)構(gòu)的一種數(shù)據(jù)庫。數(shù)據(jù)庫中的表按照行和列的形式來存儲信息。行表示關(guān)系型數(shù)據(jù)庫中的記錄,列表示數(shù)據(jù)屬性。 ? 比較著名的關(guān)系數(shù)據(jù)庫管理系統(tǒng)有 Oracle、 Sybase、DB MySQL、 Microsoft SQL Server、 Microsoft Access等。 下一頁 上一頁 返回 開始 Java的 Applet編程 92 ? 本章 ATM應(yīng)用程序使用小型關(guān)系數(shù)據(jù)庫Microsoft Access,設(shè)計一個簡單數(shù)據(jù)庫,該數(shù)據(jù)庫由一張表 account組成。如圖 。 下一頁 上一頁 返回 開始 Java的 Applet編程 93 SQL ? SQL是一個國際化標(biāo)準(zhǔn)語言,幾乎所有關(guān)系型數(shù)據(jù)庫都用 SQL語言執(zhí)行數(shù)據(jù)查詢和操縱。 ? 理解 SQL語句時要注意幾點(diǎn): ? (1) SQL語言中的語句都是獨(dú)立執(zhí)行的,無上下文聯(lián)系; ? (2) 每條語句都有自己的主關(guān)鍵字,語句中可包含若干子句; ? (3) SQL語句本身不區(qū)分大小寫。為突出語句格式,下面例子中保留字采用大寫。 下一頁 上一頁 返回 開始 Java的 Applet編程 94 ? 1. 建表語句 ? 格式: ? CREATE TABLE table_name ( column1 type [not] null,… ) ? 功能:在當(dāng)前數(shù)據(jù)庫中創(chuàng)建一張名為的 table_name表格結(jié)構(gòu)。 ? 2. 刪除表 ? 格式: ? DROP table_name ? 功能:在當(dāng)前數(shù)據(jù)庫中刪除名為 table_name的表。 下一頁 上一頁 返回 開始 Java的 Applet編程 95 ? 3. 查詢語句 ? 格式: ? SELECT col1, col2, ..., coln FROM table_name [WHERE condition_expression] ? 功能:從數(shù)據(jù)庫表中檢索滿足條件的記錄。WHERE子句是可選項,它可以包含 、 、 =、 =、 =、 和 LIKE運(yùn)算符。 LIKE運(yùn)算符用于帶有通配符百分號( %)和下劃線( _)的模式匹配。 下一頁 上一頁 返回 開始 Java的 Applet編程 96 ? 4. 插入語句 ? 格式: ? INSERT INTO table_name [(col1,col2, ..., coln)] VALUES(v1, v2, ..., vn) ? 功能:在表 table_name中插入一條記錄,各列的值依次分別為 v v … 、 vn等,若某列的列名未給,則值為 NULL。 ? 注意: (1)如果所有的列名都未給,則在 Values中必須依次給出所有列的值。 (2)給出的值的類型必須與對應(yīng)的列的類型相一致。 下一頁 上一頁 返回 開始 Java的 Applet編程 97 ? 5. 更新語句 ? 格式: ? UPDATE table_name SET col1=v1 [, col2=v2, ...,coln=vn][WHERE condition_expression] ? 功能:更新表 table_name中滿足條件的記錄,使列 col1的值為 v列 col2 ? 的值為 v … 、列 coln的值為 vn等。 ? 注意:如不給出條件,則更新表中所有記錄。 ? 例如, account表中,賬號為 “ 1280316401“的賬戶取款 200元后應(yīng)更新余額,使用語句如下: ? UPDATE account SET accountAmount=accountAmount200
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1