共享鎖,執行多個執行緒同時臨界區
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)最後得出乙個比較有意思的結論:semaphore 像是乙個共享的屋子,這個屋子裡面只能有一定的人數,這個人數是所有人可以看到的,甚至與release()這個方法,可以被別的執行緒進行呼叫,}});
}threadpool.shutdown();}}
一般使用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 新增所有檔案包括...