在 Java 程式中使用多線程要比在 C 或 C++ 中容易得多,這是因為 Java 程式設計語言提供了語言級的支援。本文通過簡單的編程樣本來說明 Java 程式中的多線程是多麼直觀。讀完本文以後,使用者應該能夠編寫簡單的多線程程式。為什麼會排隊等待?下面的這個簡單的 Java 程式完成四項不相關的任務。這樣的程式有單個控制線程,控制在這四個任務之間線性地移動。此外,因為所需的資源 — 印表機、磁碟、資料庫和顯示屏 --
線程組線程是被個別建立的,但可以將它們歸類到線程組中,以便於調試和監視。只能在建立線程的同時將它與一個線程組相關聯。在使用大量線程的程式中,使用線程組組織線程可能很有協助。可以將它們看作是電腦上的目錄和檔案結構。線程間發信當線程在繼續執行前需要等待一個條件時,僅有 synchronized 關鍵字是不夠的。雖然 synchronized 關鍵字阻止並發更新一個對象,但它沒有實現線程間發信。Object 類為此提供了三個函數:wait()、notify() 和
限制線程優先順序和調度Java 執行緒模式涉及可以動態更改的線程優先順序。本質上,線程的優先順序是從 1 到 10 之間的一個數字,數字越大表明任務越緊急。JVM 標準首先調用優先順序較高的線程,然後才調用優先順序較低的線程。但是,該標準對具有相同優先順序的線程的處理是隨機的。如何處理這些線程取決於基層的作業系統策略。在某些情況下,優先順序相同的線程分時運行;在另一些情況下,線程將一直運行到結束。請記住,Java 支援 10
Java程式設計語言使多線程如此簡單有效,以致於某些程式員說它實際上是自然的。儘管在 Java 中使用線程比在其他語言中要容易得多,仍然有一些概念需要掌握。要記住的一件重要的事情是 main() 函數也是一個線程,並可用來做有用的工作。程式員只有在需要多個線程時才需要建立新的線程。Thread 類Thread 類是一個具體的類,即不是抽象類別,該類封裝了線程的行為。要建立一個線程,程式員必須建立一個從 Thread 類匯出的新類。程式員必須覆蓋 Thread 的 run()
1.多線程中有主記憶體和工作記憶體之分, 在JVM中,有一個主記憶體,專門負責所有線程共用資料;而每個線程都有他自己私人的工作記憶體, 主記憶體和工作記憶體分貝在JVM的stack區和heap區。2.線程的狀態有'Ready', 'Running', 'Sleeping', 'Blocked', 和 'Waiting'幾個狀態,'Ready'
現在程式中有許多涉及長耗時響應過程的處理,比如訪問WebService,遠程調用,複雜處理等,如果我們使用直接順序執行的方式進行處理有可能導致介面停頓,響應停止,無謂等待等缺陷,這是不應該的。一個耗時響應過程應該採用回調和線程來處理,具體就是把原來的順序執行修改為非同步方式,並讓被調用者調用調用者以獲得執行結果。在附件的例子中,Viewer就是調用者,它代表介面,而LongTimeResponse是被調用者,它內部用線程啟動一個耗時過程,執行完畢再通知調用者。Viewer類代碼如下:public
一個簡單的利用線程池技術實現連接埠掃描(TCP)的小程式: 關鍵代碼如下: // 掃描本機private void getLocal(){ String ip = getIP(); String portStart = txPortStart1.getText().trim(); String portEnd = txPortEnd1.getText().trim(); if (portStart.length() == 0 || portEnd.length() == 0)
編寫具有多線程能力的程式經常會用到的方法有:run(),start(),wait(),notify(),notifyAll(),sleep(),yield(),join()還有一個重要的關鍵字:synchronized本文將對以上內容進行講解。一:run()和start()樣本1:public class threadtest extends thread{public void run(){for(int i=0;i<10;i++){system.out.print("
聲明:以下的測試是用的jdk1.4.2,xalan7.0對於如下xml文檔片斷: <ML:MREML xmlns:ML="MREML"><EnvelopEntity><EnvelopID>GUID2006102000002</EnvelopID><EnvelopVersion>1.0.1R</EnvelopVersion><ExchangeTime>2006-10-25
摘要:Stripes是一個以讓程式員的web開發簡單而高效為準則來設計的基於動作的開源Java web架構。本文將介紹Stripes與其它如Struts之類基於動作的架構的區別和其提供的一些存在於Ruby on Rails之中的簡單性。 Stripes是一個以讓程式員的web開發簡單而高效為準則來設計的基於動作的開源Java web架構。傳統的Java
在現代的作業系統中,有一個很重要的概念――線程,幾乎所有目前流行的作業系統都支援線程,線程來源於作業系統中進程的概念,進程有自己的虛擬位址空間以及本文段、資料區段及堆棧,而且各自佔有不同的系統資源(例如檔案、環境變數等等)。與此不同,線程不能單獨存在,它依附於進程,只能由進程派生。如果一個進程派生出了兩個線程,那這兩個線程共用此進程的全域變數和程式碼片段,但每個線程各擁有各自的堆棧,因此它們擁有各自的局部變數,線程在UNIX系統中還被進一步分為使用者級線程(由進程自已來管理)和系統級線程(由作業
一、方法
迴圈: for,while和doJava中有三種迴圈控制語句,他們是:for語句、while語句和do語句,下面分別說明這三種語句的結構。1:for迴圈for語句的格式為:for (初始化語句; 條件陳述式; 控制語句) { 語句1 ; 語句2 ; .... 語句n ; }for
1:優先順序優先順序是指同一式子中多個運算子被執行和次序,同一級裡的操作符具有相同的優先順序,相同優先順序得操作符號相遇是,根據結合性決定運算次序,下面從高到低的優先順序列出了運算子。同一行中的運算子優先順序相同。. [] () 結合性從左至右++ -- ! ~ 結合性從左至右* / % 結合性從左至右+ - 結合性從左至右<< >> >>> 結合性從左至右< > <= >=
為了在Java中儲存一個資料,必須將它容納在一個變數之中。而資料類型決定了一個變數可以賦給什麼值以及對變數進行什麼樣的操作。定義一個變數的兩個基本要素是:類型和標識符,通常你可以用如下文法去說明變數:type identifer[,identifer];
Java語言主要由以下五種元素組成:標識符、關鍵字、文字、運算子和分隔字元。這五種元素有著不同的文法含義和組成規則,它們互相配合,共同完成Java語言的語意表達。下面我們分別予以講解。1:標識符變數,類和方法都需要一定的名稱,我們將這種名稱叫做標識符。Java中對標識符有一定的限制。首先:所有的標識符的首字元必須是字母(大小寫)、底線_或美元符¥;其次標示符是由數字(0--9),所有從A--Z的大寫字母、a--z的小寫字母和底線_、美元符¥和所有在十六進位0xc0前的ASCII碼等構成;第三注意
在編寫一個類時,如果該類中的代碼可能運行於多線程環境下,那麼就要考慮同步的問題。在Java中內建了語言級的同步原語--synchronized,這也大大簡化了Java中多線程同步的使用。
什麼是多線程編程多線程編程技術是Java語言的重要特點。多線程編程的含義是將程式任務分成幾個並行的子任務。特別是在網路編程中,你會發現很多功能是可以並發執行的。比如網路傳輸速度較慢、使用者輸入速度較慢,你可以用兩個獨立的線程去完成這兩個功能,而不影響正常的顯示或其它功能。多線程是與單線程比較而言的,普通的Windows採用單線程程式結構,其工作原理是:主程式有一個訊息迴圈,不斷從訊息佇列中讀入訊息來決定下一步所要乾的事情,一般是針對一個函數,只有等這個函數執行完之後,主程式才能接收另外的訊息來執
不提倡使用的方法是為支援向後相容性而保留的那些方法,它們在以後的版本中可能出現,也可能不出現。Java 多線程支援在版本 1.1 和版本 1.2 中做了重大修訂,stop()、suspend() 和 resume() 函數已不提倡使用。這些函數在 JVM
在Java語言產生前,傳統的程式設計語言的程式同一時刻只能單任務操作,效率非常低,例如程式往往在接收資料輸入時發生阻塞,只有等到程式獲得資料後才能繼續運行。