Java多線程的使用狀況簡析

Java多線程我的以爲須要進行併發處理時使用,例如服務器須要同時接受多個客戶端鏈接,且有無需實時等待的服務處理。比方說咱們系統中短信發送任務,上萬條信息的發送咱們沒必要等待,只需次日查看發送結果便可。
具體的使用狀況能夠分爲以下幾類:
一、程序包含複雜的計算任務時
主要是利用多線程獲取更多的CPU時間(資源)。
方法一,把一個任務分解爲多個能夠子任務。
由於總有些子任務是能夠併發的,多個子任務併發執行了極可能避免CPU須要IO操做的完成,並且可以提升系統的吞吐量。緩存


方法二,緩存多線程的共享數據。
當你已經在使用多線程,不少時候必須使用共享數據。若是,數據是隻讀的,那麼能夠在第一次獲取後保存起來,之後就能夠重複使用了。可是,第一次的獲取仍是沒法避免的須要線程同步操做的。
方法三,若是線程數目有限,就不要共享數據。
作法是爲每個線程實例化一個單獨的數據,其實就是爲每個線程分配一塊數據使用。這樣沒有線程同步操做了,速度能夠儘量的提示。
方法四,若是沒辦法肯定線程數目到底有多少,那麼使用部分共享吧。
部分共享其實就是使用多個資源池代替一個資源池,資源池的數目得更加經驗來肯定。
二、處理速度較慢的外圍設備
好比鏈接多臺打印機,再好比網絡程序,涉及數據包的收發,時間因素不定。使用獨立的線程處理這些任務,可以使程序無需專門等待結果。
三、程序設計自身的須要
操做系統是基於消息循環的搶佔式多任務系統,爲使消息循環系統不至於阻塞,程序須要多個線程的來共同完成某些任務。下面尚學堂陳老師給你們提供兩個簡單的例子加以說明。服務器

Java多線程簡單小例子——實現Runnable接口:網絡

/** 
* 實現Runnable接口的類
* 
* @author 
*/ 
public class DoSomething implements Runnable {
    private String name;

    public DoSomething(String name) {
        this.name = name;
    } 

    public void run() {
        for (int i = 0; i < 5; i++) {
            for (long k = 0; k < 100000000; k++) ;
            System.out.println(name + ": " + i);
        } 
    } 
}

 

/** 
* 測試Runnable類實現的多線程程序
* 
* @author 
*/ 
public class TestRunnable {
    public static void main(String[] args) {
        DoSomething ds1 = new DoSomething("張三");
        DoSomething ds2 = new DoSomething("李四");

        Thread t1 = new Thread(ds1);
        Thread t2 = new Thread(ds2);

        t1.start(); 
        t2.start(); 
    } 
}
相關文章
相關標籤/搜索