摘要:在實(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_tmcend......
參考
http://yangcongchufang.com/%E...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/38640.html
摘要:我們知道多線程環(huán)境下,每一個線程均可以使用所屬進(jìn)程的全局變量。在線程中使用局部變量則不存在這個問題,因?yàn)槊總€線程的局部變量不能被其他線程訪問。 我們知道多線程環(huán)境下,每一個線程均可以使用所屬進(jìn)程的全局變量。如果一個線程對全局變量進(jìn)行了修改,將會影響到其他所有的線程。為了避免多個線程同時對變量進(jìn)行修改,引入了線程同步機(jī)制,通過互斥鎖,條件變量或者讀寫鎖來控制對全局變量的訪問。 只用全局變...
摘要:共享數(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)行多個任...
摘要:那線程局部變量就是每個線程都會有一個局部變量,獨(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的理解來加深印...
摘要:線程的生命周期線程的生命周期大致可以分為下面五種狀態(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)度和分派的基本單位...
摘要:并沒有提供語言級的線程局部變量,而是在類庫里提供了線程局部變量的功能,也就是這次的主角類。 Yuicon 轉(zhuǎn)載請注明原創(chuàng)出處,謝謝! 序 在多線程環(huán)境下,訪問非線程安全的變量時必須進(jìn)行線程同步,例如使用synchronized方式訪問HashMap實(shí)例。但是同步訪問會降低并發(fā)性,影響系統(tǒng)性能。這時候就可以用空間換時間,如果我們給每個線程都分配一個獨(dú)立的變量,就可以用非同步的方式使用非...
閱讀 3318·2023-04-25 16:25
閱讀 3823·2021-11-15 18:01
閱讀 1600·2021-09-10 11:21
閱讀 3007·2021-08-02 16:53
閱讀 3081·2019-08-30 15:55
閱讀 2489·2019-08-29 16:24
閱讀 2098·2019-08-29 13:14
閱讀 1027·2019-08-29 13:00