關於java多執行緒

2021-07-31 03:10:40 字數 1812 閱讀 9871

執行緒是程序的最小單元,同一程序中有多個執行緒

執行緒的互動有:互斥與同步

互斥:系統中的多個執行緒必然要共享某種系統資源,如共享cpu,共享i/o裝置,所謂間接相互制約即源於這種資源共享,印表機就是最好的例子,執行緒a在使用印表機時,其它執行緒都要等待,這就是互斥

執行緒a和執行緒b互斥訪問某個資源則它們之間就會產個順序問題——要麼執行緒a等待執行緒b操作完畢,要麼執行緒b等待執行緒操作完畢,這其實就是執行緒的同步了

同步包括互斥,互斥是一種特殊的同步

互斥的實現:synckronized(lockobj–建立的鎖物件)

lockobj.wait()方法是讓執行緒等待,後面需要用lockobj.notify()或者lockobj.notyfyall()方法使執行緒喚醒,這兩個通常是成對出現的

如何理解同步 wait set(即執行緒等待區)

當乙個執行緒獲得資源的時候,會有鎖,當執行緒獲得的資源不夠的時候,會呼叫wait()方法,釋放獲得的物件鎖,並進入wait set區,讓出資源來讓後續的執行緒獲取資源來做事,同第乙個執行緒一樣,後續的執行緒也有可能會wait(),也跟著進入了wait set區,當後續的執行緒執行的差不多了,結束了,要呼叫notify()去喚醒之前在wait set裡的執行緒,或者notifyall()喚醒所有執行緒重新搶占資源

演示**如下:

當生產者生產乙個資源後,消費者消費乙個資源,如果沒有資源,消費者等待生產者生產資源

//生產者和消費者模型

//設定公共資源

class publicresource catch (interruptedexception e)

}number++;

system.out.println("生產1個資源,總資源為:"+number);

notify();

}//減少公共資源

public

synchronized

void

decrease() catch (interruptedexception e)

}number--;

system.out.println("消耗1個資源,總資源為:"+number);

notify();

}}//建立生產者執行緒,負責生產資源

class producerthread implements runnable

@override

public

void

run() catch (interruptedexception e)

}resource.increase();

}}//建立消費者執行緒,負責生產資源

class userthread implements runnable

@override

public

void

run() catch (interruptedexception e)

}resource.decrease();;

}}//建立消費者

public

class

produceanduse

}

結果為:

關於Java多執行緒的理解

程序是系統資源分配的基本單位,而執行緒則是cpu排程的基本單位 當我們在電腦開啟乙個程式的時候,我們的作業系統就需要為這個程式分配資源 記憶體 io cpu的計算資源等 這就是建立了乙個執行緒。程序的建立是為了其內部的執行緒執行提供環境執行緒則是裡面乙個個執行執行的程式,如當你進行多人進行qq聊天的...

java多執行緒

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

Java 多執行緒

1。thread類和runnable介面 2。主線程 用thread的static thread currentthread 方法獲得 3。通過實現runnable介面建立執行緒 實現runnable介面的run方法。新執行緒在run 方法返回時結束。注意用這種方法建立程序時,在實現runnable...