Java中如何實現單個執行緒範圍內的資料共享

2021-06-21 21:24:15 字數 1817 閱讀 5141

單個執行緒範圍內的資料共享,就是確保當前的執行緒在執行的過程中,各個模組所引用的資料是乙份,且所引用的資料不會因為其他執行緒的操作而變化。

public class threadscopesharedata

}).start();

//執行緒2

new thread(new runnable()

}).start();

}}class a

}class b

}

控制台輸出:

根據控制台的結果,可以看出,由於定義了static的變數儲存資料,那麼當執行緒2更改了data資料後,執行緒1中 a模組和b模組取出的和當初執行緒1放入的不是乙個值,如何解決這個問題呢?見如下**:

一、使用全域性的map變數實現

public class threadscopesharedata

}).start();

//執行緒2

new thread(new runnable()

}).start();

}}class a

}class b

}

二、使用threadlocal類,實現單個執行緒範圍內 單個變數的資料共享

public class threadscopesharedata

}).start();

//執行緒2

new thread(new runnable()

}).start();

}}class a

}class b

}

三、使用threadlocal實現 單個執行緒內 多個變數的資料共享實現多個資料的共享可以使用map去存放資料,這裡就不說了 就是把threadlocal中的integer替換成map即可,主要貼一下使用物件儲存多個變數的**實現

①建立乙個用於存放共享資料的類

/**

* 存放共享資料的物件

* @author ***

* */

class sharedataobj

/*** 返回從threadlocal中取出當前執行緒的sharedataobj物件

* @return

*/public static sharedataobj getinstance4currentthread()

return dataobj;

}//data1

private int data1;

//data2

private string data2;

public int getdata1()

public void setdata1(int data1)

public string getdata2()

public void setdata2(string data2)

}

②操作共享資料

public class threadscopesharedata

}).start();

//執行緒2

new thread(new runnable()

}).start();

}}class a

}class b

}

mybatis中如何傳遞單個String型別的引數

目錄 使用mybatis介面引數只有乙個string的時候 如果不指定 param 的話mybatis去會把parametertype引數預設成介面的引數型別然後對於xml裡的 引數 去呼叫該型別下引數a 的get set方法然後就報錯了。使用了 param註解 mybatis就會一一對應賦值就不會...

Java中volatile實現執行緒間變數共享

size medium b volatile變數自身具有下列特性 b 可見性。對乙個volatile變數的讀,總是能看到 任意執行緒 對這個volatile變數最後的寫入。原子性 對任意單個volatile變數的讀 寫具有原子性,但類似於volatile 這種復合操作不具有原子性。上面講的是vola...

java之jersey實現單個,多個檔案上傳

post produces mediatype.consumes mediatype.multipart form data path docuupload public resultentity uploaddocuments formdataparam docuname string docun...