先來了解幾個概念:
進程:正在運行的程序成為進程,不同進程之間有獨立的內(nèi)存空間.
線程:一個進程至少有一個線程,線程之間共享內(nèi)存空間.java中的main方法,就是主線程 main trhead.
并行:兩個或多個事件在同一時刻發(fā)生,成為并行
并發(fā):兩個或多個事件在極小的時間段(毫秒級)發(fā)生,成為并發(fā).
java中Thread類及其子類才能成為線程,創(chuàng)建線程通常有兩種方式:
1.繼承Thread,并覆寫run()方法
2.實現(xiàn)Runnable接口,并實現(xiàn)run方法.
設(shè)計多線程訪問共享資源的時候,應(yīng)該選擇實現(xiàn)Runnable接口方式,否則選用繼承方式。
//針對多線程并發(fā)訪問共享資源出現(xiàn)的問題,有三種解決方案
//1.同步代碼塊
//2.同步方法
//3.鎖機制
//下面演示第一種方法,同步代碼塊,也叫同步鎖,互斥鎖等名字
//使用synchronized關(guān)鍵字synchronized(mutex),mutex表示需要監(jiān)聽,加鎖的資源.
//千萬不能用synchronized修飾run方法锨用,否則單個線程會把任務(wù)執(zhí)行完诫咱,出現(xiàn)串行現(xiàn)象赊堪,多線程就沒有意義了嚣潜。解決方法是定義一個新的方法用synchronized,在run方法中調(diào)用草描。
同步鎖,互斥鎖策严,同步監(jiān)聽器穗慕,同步監(jiān)聽對象是同一個概念。對于synchronized妻导,如果是實例方法逛绵,同步監(jiān)聽對象就是this
鎖機制
1.import java.util.concurrent.locks.ReentrantLock;
ReentrantLock lock = new ReentrantLock();
//進入方法,立刻加鎖
lock.lock();
try{
//邏輯代碼
}finally{
lock.unlock();//釋放同步鎖
}
多線程的例子具體看我的博客文章:
https://blog.csdn.net/linchengshen_/article/details/80517498