日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java線程模型如何完善相關(guān)的數(shù)據(jù)處理

Java線程模型在使用耳朵時候需要大家不斷的進行學(xué)習(xí),下面我們就看看如何才能更好的掌握相關(guān)的技術(shù)語言,判斷是搶占式還是協(xié)作式的Java線程模型,取決于虛擬機的實現(xiàn)者,并根據(jù)各種實現(xiàn)而不同。因此,Java開發(fā)員必須編寫那些能夠在兩種模型上工作的程序。

成都創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供壽寧網(wǎng)站建設(shè)、壽寧做網(wǎng)站、壽寧網(wǎng)站設(shè)計、壽寧網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計與制作、壽寧企業(yè)網(wǎng)站模板建站服務(wù),十余年壽寧做網(wǎng)站經(jīng)驗,不只是建網(wǎng)站,更提供有價值的思路和整體網(wǎng)絡(luò)服務(wù)。

正如前面所提到的,在搶占式模型中線程可以在代碼的任何一個部分的中間被打斷,除非那是一個原子操作代碼塊。原子操作代碼塊中的代碼段一旦開始執(zhí)行,就要在該線程被換出處理器之前執(zhí)行完畢。在 Java 編程中,分配一個小于32位的變量空間是一種原子操作,而此外象double和long這兩個64位數(shù)據(jù)類型的分配就不是原子的。使用鎖來正確同步共享資源的訪問,就足以保證一個多線程程序在搶占式模型下正確工作。#t#

而在協(xié)作式模型中,是否能保證線程正常放棄處理器,不掠奪其他線程的執(zhí)行時間,則完全取決于程序員。調(diào)用yield()方法能夠?qū)?dāng)前的線程從處理器中移出到準(zhǔn)備就緒隊列中。另一個方法則是調(diào)用sleep() 方法,使Java線程模型放棄處理器,并且在 sleep 方法中指定的時間間隔內(nèi)睡眠。

正如你所想的那樣,將這些方法隨意放在代碼的某個地方,并不能夠保證正常工作。如果線程正擁有一個鎖(因為它在一個同步方法或代碼塊中),則當(dāng)它調(diào)用yield()時不能夠釋放這個鎖。這就意味著即使這個Java線程模型已經(jīng)被掛起,等待這個鎖釋放的其他線程依然不能繼續(xù)運行。為了緩解這個問題,最好不在同步方法中調(diào)用yield方法。將那些需要同步的代碼包在一個同步塊中,里面不含有非同步的方法,并且在這些同步代碼塊之外才調(diào)用yield。

另外一個解決方法則是調(diào)用wait()方法,使處理器放棄它當(dāng)前擁有的對象的鎖。如果對象在方法級別上使同步的,這種方法能夠很好的工作。因為它僅僅使用了一個鎖。如果它使用fine-grained鎖,則wait() 將無法放棄這些鎖。此外,一個因為調(diào)用wait()方法而阻塞的線程,只有當(dāng)其他線程調(diào)用notifyAll()時才會被喚醒。

Java線程模型模型和 AWT/Swing

在那些使用Swing 和/或AWT包創(chuàng)建GUI(用戶圖形界面)的Java程序中,AWT事件句柄在它自己的線程中運行。開發(fā)員必須注意避免將這些GUI線程與較耗時間的計算工作綁在一起,因為這些線程必須負責(zé)處理用戶時間并重繪用戶圖形界面。換句話來說,一旦GUI線程處于繁忙,整個程序看起來就象無響應(yīng)狀態(tài)。Swing線程通過調(diào)用合適方法,通知那些Swing callback(例如 Mouse Listener 和 Action Listener )。這種方法意味著listener無論要做多少事情,都應(yīng)當(dāng)利用listener callback方法產(chǎn)生其他線程來完成此項工作。目的便在于讓listener callback更快速返回,從而允許Swing線程響應(yīng)其他事件。

如果一個Swing線程不能夠同步運行、響應(yīng)事件并重繪輸出,那怎么能夠讓其他的線程安全地修改 Swing的狀態(tài)?正如上面提到的,Swing callback在Swing 線程中運行。因此他們能修改Swing數(shù)據(jù)并繪到屏幕上。

但是如果不是Swing callback產(chǎn)生的變化該怎么辦呢?使用一個非Swing線程來修改Swing數(shù)據(jù)是不安全的。Swing提供了兩個方法來解決這個問題:invokeLater()和invokeAndWait()。為了修改Swing狀態(tài),只要簡單地調(diào)用其中一個方法,讓Runnable的對象來做這些工作。因為Runnable對象通常就是它們自身的線程,你可能會認為這些對象會作為線程來執(zhí)行。但那樣做其實也是不安全的。事實上,Swing會將這些對象放到隊列中,并在將來某個時刻執(zhí)行它的run方法。這樣才能夠安全修改Swing狀態(tài)。

Java 語言的設(shè)計,使得多線程對幾乎所有的Applet都是必要的。特別是,IO和GUI編程都需要多線程來為用戶提供完美的體驗。如果依照本文所提到的若干基本規(guī)則,并在開始編程前仔細設(shè)計系統(tǒng)——包括它對共享資源的訪問等,你就可以避免許多常見和難以發(fā)覺的Java線程模型陷阱。


網(wǎng)頁題目:Java線程模型如何完善相關(guān)的數(shù)據(jù)處理
當(dāng)前路徑:http://www.dlmjj.cn/article/cocshgh.html