各種同步控制工具的使用

2022-07-15 18:09:12 字數 2274 閱讀 4646

共享鎖,執行多個執行緒同時臨界區

public void acquire()

public void acquireuninterruptibly()

public boolean tryacquire()

public boolean tryacquire(long timeout, timeunit unit)

public void release()

public class semaphoredemo  catch (interruptedexception e) 

}});

}threadpool.shutdown();}}

最後得出乙個比較有意思的結論:semaphore 像是乙個共享的屋子,這個屋子裡面只能有一定的人數,這個人數是所有人可以看到的,甚至與release()這個方法,可以被別的執行緒進行呼叫,

一般使用acquire()  與release() 這個之間的**只能有固定數量的執行緒存在,當然這種是當前執行緒進行獲取和釋放

readwritelock是jdk5中提供的讀寫分離鎖

讀-讀不互斥:讀讀之間不阻塞。

讀-寫互斥:讀阻塞寫,寫也會阻塞讀。

寫-寫互斥:寫寫阻塞。

private static reentrantreadwritelock readwritelock=new reentrantreadwritelock();

private static lock readlock = readwritelock.readlock();

private static lock writelock = readwritelock.writelock();

這個類如果沒有寫鎖的情況下,讀是無阻塞的,在一定程度上提高了程式的執行效率。

end.countdown();   //這個方法是子執行緒作完作業之後,呼叫的

end.await();

//主線等待指定數量的子執行緒完成作業,當所有子執行緒完成之後,主線程自動啟用執行

system.out.println("集合隊伍");

for(int i=0;i每次cyclicbarrier 呼叫await()方法之後,都會等待所有的子執行緒,之後執行cyclicbarrier 的runnable的方法

unpark函式可以先於park呼叫。比如執行緒b呼叫unpark函式,給執行緒a發了乙個「許可」,那麼當執行緒a呼叫park時,它發現已經有「許可」了,那麼它會馬上再繼續執行。

上面已經提到,unpark函式可以先於park呼叫,這個正是它們的靈活之處。

乙個執行緒它有可能在別的執行緒unpark之前,或者之後,或者同時呼叫了park,那麼因為park的特性,它可以不用擔心自己的park的時序問題

各種版本控制工具的對比

有 svn,cvs,clearcase git分布式版本控制系統沒有 伺服器 每個人的電腦上都是乙個完整的版本庫,這樣工作的時候,無需要聯網了,因為版本庫就在你自己的電腦上。多人協作只需要各自的修改推送給對方,就能互相看到對方的修改了。使用git的每個人都有乙個repository git有bran...

Rsync遠端同步工具使用

rsync remote synchronize 是乙個遠端資料同步工具,可以使用 rsync演算法 同步本地和遠端主機之間的檔案。rsync的好處是只同步兩個檔案不同的部分,相同的部分不在傳遞。類似於增量備份,這使的在伺服器傳遞備份檔案或者同步檔案,比起scp工具要省好多時間。sudo apt g...

Git版本控制工具的使用

git init 只在根目錄下建立.git 資料夾 在根目錄建立.gitignore的文字檔案,會為每個人設定想要忽略的檔案。要將.gitignore加入版本庫並提交。git add 將檔案新增暫存區,然後根據暫存區的內容將檔案提交到 倉庫。省略path表示當前目錄 git add 新增所有檔案包括...