轉帖|其它|編輯:郝浩|2010-05-27 14:01:42.000|閱讀 621 次
概述:Java多線程在使用的過程中一直都不知道如何才能更加的完善呢?這個問題需要我們大家不斷的進行學習和研究。下面我們就來詳細的學習下相關問題的解決方案。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Java語言中有一個重要的特性是支持Java多線程。Java多線程是java的一項高級技術,它涉及到操作系統里面的知識,層次貼近系統層面。對于普通程序員一般很少碰它。而且目前就是在java EE(原來的J2EE)的相關框架里,對線程這個東西都是盡量回避。程序員最理想的狀態是專注業務邏輯,而不是天天想著線程這個東西怎么寫。
思考一個問題程序的本質是什么?是CPU的指令序列的集合。到底什么順序是程序員編寫的讓計算機賦值,它就賦值、寫個循環它就循環、寫個分支語句它就分支、寫個跳轉它就跳轉。每個指令流就是一個線程,并發執行多個指令流就是Java多線程。大家想,只有一個CPU怎么可能同時發出多個指令流呢?是的,并發只是“邏輯”上的,物理上是不可能的除非是兩個以上的CPU。
Java多線程和傳統的單線程的區別是由于各個線程的控制流彼此獨立,使得各個線程之間的代碼是亂序執行的,出現了并發訪問帶來的一切問題。正像是三個和尚的故事,和尚多了未必是好事。也就是剛才說的,程序員一般都不讓他們碰這個東西。
在java中如何寫線程呢,在java中就是很簡單了。有兩種方法:第一、繼承java.lang.Thread第二、實現Runnable接口。實踐:
繼承Thread而重寫了run()方法
1.public class Hello extends Thread{ 2.int i; 3.public void run(){ 4.while(true){ 5.System.out.println("Hello "+i++); 6.if(i==10) break; 7.}}} 8.public class HelloThread { 9.public static void main(String[] args){ 10.Hello h1 = new Hello(); 11.Hello h2 = new Hello(); 12.h1.start(); //用兩個線程執行那10次循環 13.h2.start(); 14.}} 上面的例子是第一種方法,下面是第二種方法 15.public class TestThread { 16.public static void main(String args[]) { 17.Xyz r = new Xyz(); 18.Xyz r1 = new Xyz(); 19.Thread t1 = new Thread(r); 20.Thread t2 = new Thread(r1); 21.t1.start();//用兩個線程執行那50次循環 22.t2.start(); 23.}} //實現Runnable接口 24.class Xyz implements Runnable { 25.int i; 26.public void run() { 27.i = 0; 28.while (true) { 29.System.out.println("Hello " + i++); 30.if ( i == 50 ) { 31.break; 32.}}}} |
上面兩種方法繼承Thread類,Java多線程是比較簡單的,代碼也比較少。但是我們不提倡使用這種方法。而第二種實現Runnable接口,更符合面向對象思想,Thread是把虛擬的CPU看成一個對象,封裝了CPU的細節。但是Thread的構造線程的子類的方法中與CPU不相關,沒有必要把CPU的細節都繼承來。而實現Runnable則不影響java.lang.Thread的體系。而且便于其它類的繼承。
Java多線程發的代碼和數據的執行順序混亂,我們也需要自己調度和控制它們。
本站文章除注明轉載外,均為本站原創或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:網絡轉載