Java多執行緒9 多執行緒的提高

2021-08-22 19:48:45 字數 2333 閱讀 5070

之前的內容:理解多執行緒。建立多執行緒。多執行緒的安全問題/分析與理解。安全問題的解決辦法/鎖

之前的例子都是多個執行緒執行乙個執行緒任務,多執行緒的提高——多個執行緒執行不同的執行緒任務,併發執行

例如:消費者與生產者,乙個消費乙個生產,執行的執行緒任務不同,但是處理的資源是一樣的。但是要求同時進行

這叫做執行緒間的通訊——你有你的動作,我有我的動作,但是處理的是同乙個資源

初步**:(執行有錯誤)

package thread;

/*執行緒的提公升;生產者消費者問題

乙個消費乙個生產,執行的執行緒任務不同,但是處理的資源是一樣的。但是要求同時進行

//執行緒間的通訊

簡化後的生產者和消費者——生產乙個 消費乙個

1.描述資源

2.描述生產者,具備自己的任務

3.描述消費者,具備自己的任務

*///描述資源——屬性:名字,編號。行為:對商品名稱賦值,獲取商品

class resource

//消費者的

public void out()

}class producer implements runnable

public void run()

}//描述消費者

class consumer implements runnable

public void run()

}public class producerandconsumer

}

執行結果:有錯誤

問題:這個程式的輸出必須遵守,生產乙個消費乙個,正確的資料應該為:1 1 2 2 3 3 4 4 5 5.

以上兩種錯誤情況是其中的兩種,現在針對相應的錯誤做出解決方案:

1.很早被生產的商品(編號已經)被覆蓋,才被消費到

輸出結果:1 2 3 4 5 6(生產者)//1 .。。。(消費者)

按理說編號1 早已經被覆蓋,不應該現在才被消費到

解決辦法《這是執行緒的安全問題——使用同步   ——————解決了該問題

2.問題1 解決,但是又出現新的問題:有些商品不會被消費到(連續生產但是沒有消費/對同乙個商品進行多次消費):1 2 3 4 5 //(生產者)5 5 5 5//(消費者)

我們的希望應該是:生產乙個消費乙個

思考:什麼時候生產————————盤子裡沒有商品時

什麼時候消費————————————盤子裡有商品時

設定標記

思路

/*執行緒的提公升;生產者消費者問題

乙個消費乙個生產,執行的執行緒任務不同,但是處理的資源是一樣的。但是要求同時進行

//執行緒間的通訊

簡化後的生產者和消費者——生產乙個 消費乙個

1.描述資源

2.描述生產者,具備自己的任務

3.描述消費者,具備自己的任務

*///描述資源——屬性:名字,編號。行為:對商品名稱賦值,獲取商品

class resourcecatch(interruptedexception e){}//存在商品,此執行緒停止

}else

}//消費者的

public synchronized void out()catch(interruptedexception e){} //沒有商品,消費者停止

}system.out.println(thread.currentthread().getname()+" 消費者 "+this.name);

flag =false;//修改標記

notify();//喚醒生產者

}}//描述生產者

class producer implements runnable

public void run()

}}//描述消費者

class consumer implements runnable

public void run()

}}public class producerandconsumer

}

多執行緒9 執行緒池

從原始碼中可以看出,執行緒池的建構函式有7個引數,分別是corepoolsize maximumpoolsize keepalivetime unit workqueue threadfactory handler 一 corepoolsize 執行緒池核心執行緒大小 執行緒池中會維護乙個最小的執行...

多執行緒 Java多執行緒與併發

實現的方式主要有三種 執行緒的狀態 基本差別 最主要的本質區別 兩個概念 鎖池 假設執行緒a已經擁有了某個物件 不是類 的鎖,而其他執行緒b c想要呼叫這個物件的某個synchronized方法 或者塊 由於b c執行緒在進入物件的synchronized方法 或者塊 之前必須先獲得該物件鎖的擁有權...

java多執行緒

在網上看到很有意思的問題,摘下來好好看下 在面試的時候被問了乙個多執行緒的問題 回來仔細思考了一下,多執行緒是否真的能提高了效率?我對多執行緒的理解就是 比如挖乙個隧道,有2種開工方法 1 只在山的一頭挖,直至挖到山的另一頭,從而打通隧道,這可以看成是單執行緒 2 在山的兩頭挖,同時開工,最後在山的...