国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

多線程中的局部變量

bitkylin / 2969人閱讀

摘要:在實(shí)現(xiàn)多線程業(yè)務(wù)時,如果沒有涉及到共享數(shù)據(jù)處理的業(yè)務(wù),還是使用局部變量,必將,在處理共享數(shù)據(jù)時,還是需要加鎖線程與線程間的局部變量相互獨(dú)立,變量的處理互補(bǔ)干擾。

在實(shí)現(xiàn)多線程業(yè)務(wù)時,如果沒有涉及到共享數(shù)據(jù)處理的業(yè)務(wù),還是使用局部變量,必將,在處理共享數(shù)據(jù)時,還是需要加鎖;線程與線程間的局部變量相互獨(dú)立,變量的處理互補(bǔ)干擾。

在多線程的場景下,針對線程中的局部變量,如果需要讓其他業(yè)務(wù)操作此變量時,此時

局部變量相對當(dāng)前線程來講,是全局變量;

局部變量相對其他線程來講,是局部變量;

為了實(shí)現(xiàn)當(dāng)前線程的局部變量被部分業(yè)務(wù)處理時,以兩個小例子說明下

示例 1:自定義全局變量,以當(dāng)前線程做為 key
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

from threading import current_thread, Thread

global_variable = {}


def handler():
    std = global_variable[current_thread()]
    print "Hello {} and this thread"s name is {}".format(std, current_thread().name)


def test_thread(name):
    global_variable[current_thread()] = name
    handler()


t1 = Thread(target=test_thread, args=("Kobe", ), name="thread_kobe")
t2 = Thread(target=test_thread, args=("TMC", ), name="thread_tmc")

t1.start()
t2.start()

t1.join()
t2.join()

print global_variable
print "end......"

運(yùn)行結(jié)果:

Hello Kobe and this thread"s name is thread_kobe
 Hello TMC and this thread"s name is thread_tmc
{: u"Kobe", : u"TMC"}
end......

這樣,當(dāng)前線程的數(shù)據(jù)不會被其他線程捕捉和處理,但是不建議這么做,畢竟 threading 模塊提供了 local

示例 2:使用 local
# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals

from threading import current_thread, Thread, local

local_variable = local()


def handler():
    std = local_variable.name
    print "Hello {} and this thread"s name is {}".format(std, current_thread().name)


def test_thread(name):
    local_variable.name = name
    handler()


t1 = Thread(target=test_thread, args=("Kobe", ), name="thread_kobe")
t2 = Thread(target=test_thread, args=("TMC", ), name="thread_tmc")

t1.start()
t2.start()

t1.join()
t2.join()

print local_variable
print "end......"

運(yùn)行結(jié)果如下:

Hello Kobe and this thread"s name is thread_kobe
Hello TMC and this thread"s name is thread_tmc

end......

參考

http://yangcongchufang.com/%E...

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38640.html

相關(guān)文章

  • 深入理解Python中的ThreadLocal變量(上)

    摘要:我們知道多線程環(huán)境下,每一個線程均可以使用所屬進(jìn)程的全局變量。在線程中使用局部變量則不存在這個問題,因?yàn)槊總€線程的局部變量不能被其他線程訪問。 我們知道多線程環(huán)境下,每一個線程均可以使用所屬進(jìn)程的全局變量。如果一個線程對全局變量進(jìn)行了修改,將會影響到其他所有的線程。為了避免多個線程同時對變量進(jìn)行修改,引入了線程同步機(jī)制,通過互斥鎖,條件變量或者讀寫鎖來控制對全局變量的訪問。 只用全局變...

    huangjinnan 評論0 收藏0
  • 并發(fā)學(xué)習(xí)筆記(1)

    摘要:共享數(shù)據(jù)使線程之間的通信比進(jìn)程之間的通信更有效。并發(fā)模型和的區(qū)別說明的作用是啟動一個新線程操作系統(tǒng)級別,有一個方法啟動新線程,新線程會執(zhí)行相應(yīng)的方法。單獨(dú)調(diào)用會在當(dāng)前線程中執(zhí)行并不會啟動新線程創(chuàng)建一個線程即可但是這個線程沒有執(zhí)行任何代碼段。 tutorials site 并發(fā)Concurrency發(fā)展的歷史 單CPU,一次只能運(yùn)行一個程序 -- 多任務(wù),一次同時運(yùn)行多個任...

    objc94 評論0 收藏0
  • (基礎(chǔ)系列)ThreadLocal的用法、原理和用途

    摘要:那線程局部變量就是每個線程都會有一個局部變量,獨(dú)立于變量的初始化副本,而各個副本是通過線程唯一標(biāo)識相關(guān)聯(lián)的。移除此線程局部變量當(dāng)前線程的值。如果此線程局部變量隨后被當(dāng)前線程讀取,且這期間當(dāng)前線程沒有設(shè)置其值,則將調(diào)用其方法重新初始化其值。 前言 ThreadLocal網(wǎng)上資料很多,那我為什么還要寫下這篇文章呢?主要是想?yún)R聚多篇文章的優(yōu)秀之處以及我對于ThreadLocal的理解來加深印...

    bitkylin 評論0 收藏0
  • Java線程的生命周期

    摘要:線程的生命周期線程的生命周期大致可以分為下面五種狀態(tài)新建狀態(tài)就緒狀態(tài)運(yùn)行狀態(tài)休眠狀態(tài)終止?fàn)顟B(tài)新建狀態(tài),是線程被創(chuàng)建且未啟動的狀態(tài)這里的創(chuàng)建,僅僅是在的這種編程語言層面被創(chuàng)建,而在操作系統(tǒng)層面,真正的線程還沒有被創(chuàng)建。 概要 目前CPU的運(yùn)算速度已經(jīng)達(dá)到了百億次每秒,甚至更高的量級,家用電腦即使維持操作系統(tǒng)正常運(yùn)行的進(jìn)程也會有數(shù)十個,線程更是數(shù)以百計。 線程是CPU的調(diào)度和分派的基本單位...

    ivyzhang 評論0 收藏0
  • Java線程基礎(chǔ)-ThreadLocal

    摘要:并沒有提供語言級的線程局部變量,而是在類庫里提供了線程局部變量的功能,也就是這次的主角類。 Yuicon 轉(zhuǎn)載請注明原創(chuàng)出處,謝謝! 序 在多線程環(huán)境下,訪問非線程安全的變量時必須進(jìn)行線程同步,例如使用synchronized方式訪問HashMap實(shí)例。但是同步訪問會降低并發(fā)性,影響系統(tǒng)性能。這時候就可以用空間換時間,如果我們給每個線程都分配一個獨(dú)立的變量,就可以用非同步的方式使用非...

    JasonZhang 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<