欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python多線程的線程如何安全實現(xiàn)

 更新時間:2021年08月13日 08:34:40   作者:小妮淺淺  
在本篇文章里小編給大家整理了一篇關(guān)于python多線程的線程如何安全實現(xiàn)的內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。

1、引言

當(dāng)前隨著計算機硬件的快速發(fā)展,個人電腦上的 CPU 也是多核的,現(xiàn)在普遍的 CUP 核數(shù)都是 4 核或者 8 核的。因此,在編寫程序時,需要為了提高效率,充分發(fā)揮硬件的能力,則需要編寫并行的程序。Java 語言作為互聯(lián)網(wǎng)應(yīng)用的主要語言,廣泛應(yīng)用于企業(yè)應(yīng)用程序的開發(fā)中,它也是支持多線程(Multithreading)的,但多線程雖好,卻對程序的編寫有較高的要求。

單線程可以正確運行的程序不代表在多線程場景下能夠正確運行,這里的正確性往往不容易被發(fā)現(xiàn),它會在并發(fā)數(shù)達(dá)到一定量的時候才可能出現(xiàn)。這也是在測試環(huán)節(jié)不容易重現(xiàn)的原因。因此,多線程(并發(fā))場景下,如何編寫線程安全(Thread-Safety)的程序,對于程序的正確和穩(wěn)定運行有重要的意義。

下面將結(jié)合示例,談?wù)勅绾卧?Java 語言中,實現(xiàn)線程安全的程序。

為了給出感性的認(rèn)識,下面給出一個線程不安全的示例,具體如下:

package com.example.learn;
public class Counter {
    private static int counter = 0;
    public static int getCount(){
        return counter;
    }
    public static  void add(){
        counter = counter + 1;
    }
}

2、synchronized方法

基于上述的示例,讓其變成線程安全的程序,最直接的就是在對應(yīng)的方法上添加 synchronized 關(guān)鍵字,讓其成為同步的方法。它可以修飾一個類,一個方法和一個代碼塊。對上述計數(shù)程序進(jìn)行修改,代碼如下:

package com.example.learn;
public class Counter {
    private static int counter = 0;
    public static int getCount(){
        return counter;
    }
    public static synchronized void add(){
        counter = counter + 1;
    }
}

3、加鎖機制

另外一種常見的同步方法就是加鎖,比如 Java 中有一種重入鎖 ReentrantLock,它是一種遞歸無阻塞的同步機制,相對于 synchronized 來說,它可以提供更加強大和靈活的鎖機制,同時可以減少死鎖發(fā)生的概率。示例代碼如下:

package com.example.learn;
import java.util.concurrent.locks.ReentrantLock;
public class Counter {
    private  static int counter = 0;
    private static final ReentrantLock lock = new ReentrantLock(true);
    public static int getCount(){
        return counter;
    }
    public static  void add(){
        lock.lock();
        try {
            counter = counter + 1;
        } finally {
            lock.unlock();
        }
    }
}

到此這篇關(guān)于python多線程的線程如何安全實現(xiàn)的文章就介紹到這了,更多相關(guān)python多線程的線程安全實現(xiàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中使用select模塊實現(xiàn)非阻塞的IO

    Python中使用select模塊實現(xiàn)非阻塞的IO

    這篇文章主要介紹了Python中使用select模塊實現(xiàn)非阻塞的IO,本文使用一個簡單聊天室程序講解Python中的select模塊使用,需要的朋友可以參考下
    2015-02-02
  • python 讀取串口數(shù)據(jù)的示例

    python 讀取串口數(shù)據(jù)的示例

    這篇文章主要介紹了python 讀取串口數(shù)據(jù)的示例,幫助大家更好的理解和使用python,感興趣的朋友可以了解下
    2020-11-11
  • 關(guān)于python3.7安裝matplotlib始終無法成功的問題的解決

    關(guān)于python3.7安裝matplotlib始終無法成功的問題的解決

    這篇文章主要介紹了關(guān)于python3.7安裝matplotlib始終無法成功的問題的解決,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • pytorch ImageFolder的覆寫實例

    pytorch ImageFolder的覆寫實例

    今天小編就為大家分享一篇pytorch ImageFolder的覆寫實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實現(xiàn)QQ批量登錄功能

    python實現(xiàn)QQ批量登錄功能

    這篇文章主要為大家詳細(xì)介紹了python實現(xiàn)QQ批量登錄功能,以及python3.6批量登陸QQ,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • python中l(wèi)ogging庫的使用總結(jié)

    python中l(wèi)ogging庫的使用總結(jié)

    Python的logging模塊提供了通用的日志系統(tǒng),可以方便第三方模塊或者是應(yīng)用使用,下面這篇文章主要給大家介紹了關(guān)于python中l(wèi)ogging庫使用的一些知識總結(jié),文中給出了詳細(xì)的示例代碼,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Python遍歷指定文件及文件夾的方法

    Python遍歷指定文件及文件夾的方法

    這篇文章主要介紹了Python遍歷指定文件及文件夾的方法,對比兩種實現(xiàn)技巧分析了Python遍歷文件及文件夾的方法,需要的朋友可以參考下
    2015-05-05
  • 學(xué)習(xí)python的幾條建議分享

    學(xué)習(xí)python的幾條建議分享

    熟悉python語言,以及學(xué)會python的編碼方式。熟悉python庫,遇到開發(fā)任務(wù)的時候知道如何去找對應(yīng)的模塊。知道如何查找和獲取第三方的python庫,以應(yīng)付開發(fā)任務(wù)
    2013-02-02
  • python中文字符如何轉(zhuǎn)url編碼

    python中文字符如何轉(zhuǎn)url編碼

    這篇文章主要介紹了python中文字符如何轉(zhuǎn)url編碼問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Python虛擬機字節(jié)碼教程之裝飾器實現(xiàn)詳解

    Python虛擬機字節(jié)碼教程之裝飾器實現(xiàn)詳解

    在本篇文章當(dāng)中主要給大家介紹在?cpython?當(dāng)中一些比較常見的字節(jié)碼,從根本上理解?python?程序的執(zhí)行。在本文當(dāng)中主要介紹一些?python?基本操作的字節(jié)碼,并且將從字節(jié)碼的角度分析函數(shù)裝飾器的原理
    2023-04-04

最新評論