歡迎您光臨本站 註冊首頁

java 線程鎖synchronized應用技巧

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0
Java多線程的同步依靠的是對象鎖機制,synchronized關鍵字的背後就是利用了封鎖來實現對共享資源的互斥訪問.
下面以一個簡單的實例來進行對比分析.實例要完成的工作非常簡單,就是創建10個線程,每個線程都列印從0到99這100個數字,希望線程之間不會出現交叉亂序列印,而是順序地列印.
先來看第一段代碼,這裡我們在run()的調用方法中加入了synchronized關鍵字,希望能對run方法進行互斥訪問,但結果並不如我們希望那樣,這是因為這裡synchronized鎖住的是this對象,即當前運行線程對象本身.Java多線程代碼中創建了10個線程,而每個線程都持有this對象的對象鎖,這不能實現線程的同步.
如何達到我們想要的要求呢?
答案就是在run()調用的方法taskHandler中加上static 聲明, synchronized關鍵字就會鎖定靜態類的實例對象, 線程是互斥訪問的, 這樣就可以達到線程的同步要求了.代碼如下:
package com.Glaivelee.MultiThreading.thread001;
public class myThread001 {
public static void main(String[] args) {
for(int i = 0 ; i < 10 ; i ){
new Thread(new MyThread(i)).start();
}}}
class MyThread implements java.lang.Runnable{
private int threadID;
public MyThread(int id){
this.threadID = id;
}
public void run(){
taskHandler(this.threadID);
}
//線程鎖
private synchronized void taskHandler(int threadID){
for(int i = 0 ; i < 100 ; i ){
System.out.println("thread ID:" threadID " : " i);
}
}
}


[火星人 ] java 線程鎖synchronized應用技巧已經有368次圍觀

http://coctec.com/docs/java/show-post-59976.html