1. 程式人生 > >synchronized修飾方法,保證資料同步準確性,限制執行緒互斥訪問

synchronized修飾方法,保證資料同步準確性,限制執行緒互斥訪問

1.未加synchronized關鍵,造成訪問順序混亂
package thread;
/**
 * @author [email protected] created on 2015/2/6.
 */
public class Test extends Thread {
public void jump() {
for (int i = 0; i < 100; i++) {
if(i%10==0)
System.out.println(); System.out.print(" "+this.currentThread().getName() + ":" + i + "\t"+" ");
} } @Override public void run() { jump(); } public static void main(String[] args) { Test test = new Test(); Thread a = new Thread(test, "A"); Thread b = new Thread(test, "B"); a.start(); b.start(); } }
執行結果:
2. 新增synchronized進行互斥訪問可以解決資料不同步的問題
package thread;
/**
 * @author [email protected]
created on 2015/2/6.
*/ public class Test extends Thread { public synchronized void jump() { for (int i = 0; i < 100; i++) { if(i%10==0)
System.out.println(); System.out.print(" "+this.currentThread().getName() + ":" + i + "\t"+" "); } } @Override public void run() { jump(); } public static void main
(String[] args) { Test test = new Test(); Thread a = new Thread(test, "A"); Thread b = new Thread(test, "B"); a.start(); b.start(); } }
執行結果:
總結:使用了synchronized可以使一個執行緒執行完synchronized所修飾的方法,其他需要排隊等候,可以保證資料的準確性。

相關推薦

synchronized修飾方法保證資料同步準確性限制執行互斥訪問

1.未加synchronized關鍵,造成訪問順序混亂 package thread; /** * @author [email protected] created on 20

JAVA 同步synchronized 修飾方法被多物件訪問是否執行安全?

在JAVA多執行緒程式設計中,將需要併發執行的程式碼放在Thread類的run方法裡面,然後建立多個Thread類的物件,呼叫start()方法,執行緒啟動執行。 當某段程式碼需要互斥時,可以用 synchronized 關鍵字修飾,這裡討論 synchronized 關鍵

synchronized修飾方法和對象的區別

關系型 target volitile 個數 同步 知識庫 樂觀鎖 title 調用 使用synchronized(object) { 代碼塊.... } 能對代碼塊進行加鎖,不允許其他線程訪問,其的作用原理是:在object內有一個變量,當有線程進入時,判斷是否為0,如果

一張圖講解對象鎖和關鍵字synchronized修飾方法

www. 堅持 測試 共享資源 成長 和我 核心技術 資源 rri 每個對象在出生的時候就有一把鑰匙(監視器),那麽被synchronized 修飾的方法相當於給方法加了一個鎖,這個方法就可以進行同步,在多線程的時候,不會出現線程安全問題。 下面通過一張圖片進行講解: 1.

一張圖講解對象鎖和關鍵字synchronized修飾方法(代碼塊)

簡單 讓我 同步 所有 鑰匙 可能 轉換 java 有關   每個對象在出生的時候就有一把鑰匙(監視器Monitor),那麽被synchronized 修飾的方法相當於給方法加了一個鎖,這個方法就可以進行同步,在多線程的時候,不會出現線程安全問題。    註:Monitor

一張圖講解物件鎖和關鍵字synchronized修飾方法(程式碼塊)

每個物件在出生的時候就有一把鑰匙(監視器Monitor),那麼被synchronized 修飾的方法相當於給方法加了一個鎖,這個方法就可以進行同步,在多執行緒的時候,不會出現執行緒安全問題。 注:Monitor是 Java中用以實現執行緒之間的互斥與協作的主要

【厲害了FPGA】Verilog實現接收幀資料的一種方法(幀資料同步搜尋檢測)

    FPGA和其他裝置進行通訊的時候,如果傳輸的是大量資料,肯定需要打包(組幀)進行傳輸,而且都需要有幀頭和校驗位來確保幀資料傳輸正確。今天說一下最近自己做的一個專案涉及到的這個問題。    當FPGA作為接收端去接收幀資料的時候,即使保證一幀資料的幀頭是正確的,而且校驗

一個類有兩個方法其中一個是同步另一個是非同步的; 現在又兩個執行A和B請問:當執行A訪問此類的同步方法執行B是否能訪問此類的非同步方法

一個類有兩個方法,其中一個是同步的,另一個是非同步的;現在又兩個執行緒A和B,請問:當執行緒A訪問此類的同步方法時,執行緒B是否能訪問此類的非同步方法? 答案:可以 驗證 package com.my.test2; public class ClassA { public syn

通過WEB伺服器訪問MYSQL並且資料同步到android SQLite資料庫

2、連線資料庫。 3、訪問資料庫      過程2、3 具體步驟: 1、在Myeclipse下新建一個web專案,為了好統一管理在WEB-INF下建一個web.xml用來載入伺服器啟動時的配置資訊。這個檔案是由大量的<servlet></servle

跨伺服器資料同步方式!

過程:PLSQL——>Database links——>新建一個dblink 新建dblink具體步驟: 1、資料庫連線       所有者:XXX(比如:EAPS)       名稱:XXX(辨識度高點的名字,比如:EAPS_LINK) 2、連線到

Oracle 觸發器 插入更新刪除,資料同步兩表同步

create or replace trigger UserToTemp after insert or update or delete on user_info for each row declare     integrity_error exception;     errno           

使用Sentinel Dashboard動態推資料同步到Nacos

一 :修改pom.xml中的sentinel-datasource-nacos的依賴,將<scope>test</scope>註釋掉,這樣才能在主程式中使用。 <dependency> <groupId>com.alib

UWP 使用SSL證書保證資料安全

事情是這樣的,我們後端的小夥伴升級了使用者會員系統,使用了全新的GraphQL登入機制,並且採用SSL加密的方式來實現阻止陌生客戶端請求的案例。 GraphQL在UWP端的實現,以後有時間會單獨寫一篇文章,這裡先說一下怎麼在UWP裡面使用SSL證書的問題。   其實接這個任務也是一個臨時調研的

IO流讀取資料檔案資料寫入資料庫並記錄資料匯入日誌

流程分析: 資料型別: ROUTE_ID,LXBM,ROAD_NAME,SRC_LON,SRC_LAT,DEST_LON,DEST_LAT 10000,G50,滬渝高速,115.8605349,30.08934467,115.5437817,30.08898601 10001,G

關於hashmap和hashtable的區別及如何使hashmap變得執行安全?(除了synchronized)---concurrentHashmap

我們都知道hashmap是執行緒不安全的,而效率也比較高,他允許我們存入null鍵及null值; 而 hashtable 是執行緒安全的,其效率比較低,不允許我們存入null鍵和null值; 除了非同步及允許使用null值,hashmap與hashtable基本相同; 那麼為什麼hash

關於併發/並行阻塞/非阻塞同步/非同步及程序/執行的理解

1. 阻塞,非阻塞           一個執行緒/程序經歷的5個狀態,建立,就緒,執行,阻塞,終止。各個狀態的轉換條件如上圖,其中有個阻塞狀態,就是說當執行緒中呼叫某個函式,需要IO請求,或者暫時得不到競爭資源的,作業系統會把該執行緒

Ionic 【tabs模板】 詳情頁重新整理以後頁面資料不消失點選返回按鈕可回到首頁

1.詳情頁重新整理,確保當前頁面資料不丟失 首先假設 首頁(home)跳轉到 home-details,傳遞引數code: //home.ts this.navCtrl.push(HomeDetailsPage,{ code:code })   然後再home-det

pandas 獲得行列數shuffle 函式sample() 重建索引DataFrame資料篩選——locilocatiat

#pandas獲取資料行數和列數,並非是用len或者length的,而是用shape: Count_Row=df.shape[0] #gives number of row count Count_Col=df.shape[1] #gives number of col count pandas資

物聯網雲端計算資料和人工智慧之間的區別和關係

物聯網,雲端計算,大資料,人工智慧是近兩年科技、產業界的熱門話題。分別什麼意思?之間又有什麼關係呢?今天把個人的理解給大家整理了一下,一起來看看: 物聯網IoT(Internet of things) 物聯網是網際網路的應用拓展,與其說物聯網是網路,不如說物聯網是業務和應用。因此,應用創新是

Java併發程式設計基礎//程序:每個程序都有獨立的程式碼和資料空間(程序上下文)程序間的切換開銷比較大一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間每個執行緒擁有獨立的執行棧和程式計

1.實現多執行緒的兩種方式: (1)繼承Thread類; (2)實現Runnable介面 //程序:每個程序都有獨立的程式碼和資料空間(程序上下文),程序間的切換開銷比較大,一個程序包含1-n個執行緒 //執行緒:同一類執行緒共享程式碼和資料空間,每個執行緒擁有獨立的執行