成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java線程模型如何完善相關的數據處理

開發 后端
Java線程模型只有在不斷的學習中才能更好的掌握相關問題的解決方案。下面我們就詳細的來看看如何才能更好的掌握相關的方案。

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

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

而在協作式模型中,是否能保證線程正常放棄處理器,不掠奪其他線程的執行時間,則完全取決于程序員。調用yield()方法能夠將當前的線程從處理器中移出到準備就緒隊列中。另一個方法則是調用sleep() 方法,使Java線程模型放棄處理器,并且在 sleep 方法中指定的時間間隔內睡眠。

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

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

Java線程模型模型和 AWT/Swing

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

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

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

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

 

責任編輯:張浩 來源: 博客園
相關推薦

2009-12-25 15:58:37

WPF數據處理

2024-02-07 09:25:52

數據處理快手大模型

2025-06-16 07:07:03

Java數據Jackson

2023-11-29 13:56:00

數據技巧

2009-07-15 18:06:38

Swing線程

2017-07-21 14:22:17

大數據大數據平臺數據處理

2013-12-16 17:17:01

OpenMp數據處理

2023-07-31 08:21:22

語法校對器Pick

2023-10-05 12:43:48

數據處理

2019-01-25 13:22:50

RocketMQ數據處理

2024-01-31 23:22:35

vaexPython

2016-12-13 11:48:05

數據處理不平衡數據

2024-04-01 10:07:47

應用程序數據數據庫

2018-12-07 14:50:35

大數據數據采集數據庫

2020-11-02 15:56:04

大數據數據庫技術

2010-04-12 11:12:53

Oracle數據處理

2018-08-14 11:05:25

2014-06-05 09:29:03

數據處理

2025-01-07 13:58:08

SQL數據處理函數數據庫

2023-09-27 15:34:48

數據編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品一区二区三区91 | 亚洲午夜av久久乱码 | 精品国产亚洲一区二区三区大结局 | 国产精品中文字幕在线 | 日本不卡一区二区三区在线观看 | 国产日韩精品视频 | 免费毛片网 | 九九久久精品 | 国产成人精品免费视频大全最热 | 老司机深夜福利网站 | 免费国产一区 | 97视频成人 | 日韩欧美不卡 | 亚洲午夜视频在线观看 | 干干干日日日 | 在线国产中文字幕 | 国产欧美日韩 | 99久久精品免费视频 | 日韩中文字幕在线观看 | 亚洲综合视频一区 | 亚洲视频在线观看 | 国产精品久久久久aaaa九色 | 超碰地址 | 天堂男人av | 一本一道久久a久久精品蜜桃 | 韩日免费视频 | 一区二区视频在线观看 | 91传媒在线观看 | 中文字幕免费 | 国产精品视频久久 | 国产视频一视频二 | av中文字幕在线观看 | 国产精品久久久久久52avav | 国产成人精品亚洲日本在线观看 | 99精品亚洲国产精品久久不卡 | 欧美一区二区三区视频 | 久久久成人免费一区二区 | 国产在线激情视频 | 精品国产欧美一区二区 | 久久丝袜 | 成人免费在线观看 |