資源簡介
java實現(xiàn)同步算法在分布式系統(tǒng)中的實現(xiàn)與應用,用lamport算法解決停車場問題

代碼片段和文件信息
import?java.util.linkedList;
import?java.util.ListIterator;
import?javax.swing.JOptionPane;
public?class?EntryPort?{
private?int?logicalTime?=?0?replyCount?=?0?joinReply;
public?int?unoccupiedNum?entryNum?exitNum?totalPortNum;?
public?Mailbox?mailbox;
private?int?id;
private?boolean?criticalEntered?=?false;
private?Message?applyMsg?=?null;
private?linkedList?appList;
public?EntryPort(int?id?InitialView?initialView)
{
this.unoccupiedNum?=?initialView.unoccupiedNum;//空位數(shù)
this.entryNum?=?initialView.entryNum;
this.exitNum?=?initialView.exitNum;
this.totalPortNum?=?this.entryNum?+?this.exitNum;
this.id?=?id;//本地ID號
this.mailbox?=?new?Mailbox(initialView);
appList?=?new?linkedList();
}
public?synchronized?void?apply(){
try
{
if(unoccupiedNum?==?0){
JOptionPane.showMessageDialog(null“There?is?no?space?left?now.?Please?wait...“
“Info“JOptionPane.INFORMATION_MESSAGE);
return?;
}
Message?applyMsg?=?new?Message(1?logicalTime?0?id?1);
++logicalTime;
replyCount?=?entryNum?-?1;
for(int?i?=?0;?i? {
applyMsg.clock?=?logicalTime;
++logicalTime;
if?(id?!=?i)
{
mailbox.send(1?i?applyMsg);
}
}
while(replyCount?!=?0)
{
wait();
}
while?(unoccupiedNum?==?0)
{
wait();
}
criticalEntered?=?true;
release();
}
catch(Exception?e)
{
System.out.println(e);
}
}
public?synchronized?void?jion(){
try
{
joinReply?=?entryNum?-?1;
Message?msg?=?new?Message(5?-1?0?id?1);
for(int?i?=?0;?i? {
msg.clock?=?logicalTime;
++logicalTime;
if?(id?!=?i)
{
mailbox.send(1?i?msg);
}
}
while(joinReply?!=?0)
{
wait();
}
criticalEntered?=?true;
joinReply?=?exitNum;
for(int?i?=?0;?i? {
msg.clock?=?logicalTime;
++logicalTime;
mailbox.send(0?i?msg);
}
while(joinReply?!=?0)
{
wait();
}
msg?=?new?Message(1?logicalTime?logicalTime?id?1);
for(int?i?=?0;?i? {
msg.clock?=?logicalTime;
++logicalTime;
mailbox.send(0?i?msg);
}
msg?=?new?Message(2?logicalTime?logicalTime?id?1);
ListIterator?iter?=?appList.listIterator();
while(iter.hasNext())
{
msg.clock?=?logicalTime;
++logicalTime;
mailbox.send(1?msg.source?msg);
iter.remove();
}
applyMsg?=?null;
criticalEntered?=?false;
System.out.println(“A?new?entry?has?been?added?successfully!“);
}
catch(Exception?e)
{
System.out.println(e);
}
}
public??void?receive(){
try
{
Message?msg?=?mailbox.pop();
synchronized(this)
{
logicalTime?=?1?+?((msg.clock?>?logicalTime)??msg.clock?:?logicalTime);
//1:application;?2:reply;?
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????6546??2009-01-01?21:41??停車場問題實驗源程序\EntryPort.java
?????文件???????2512??2009-01-01?15:17??停車場問題實驗源程序\ExitPort.java
?????文件???????4695??2008-12-21?20:53??停車場問題實驗源程序\InitialView.java
?????文件????????714??2008-12-16?10:54??停車場問題實驗源程序\ListTest.java
?????文件???????1084??2009-01-01?15:18??停車場問題實驗源程序\Mailbox.java
?????文件????????459??2009-01-01?15:02??停車場問題實驗源程序\Message.java
?????文件????????203??2008-12-16?11:17??停車場問題實驗源程序\NewTest.java
?????文件?????????28??2008-12-13?13:26??停車場問題實驗源程序\Port.java
?????文件???????3561??2009-01-01?08:56??停車場問題實驗源程序\PortPanel.java
?????文件???????1007??2008-12-15?14:17??停車場問題實驗源程序\Test.java
?????文件????????279??2008-12-19?17:14??停車場問題實驗源程序\Test1.java
?????文件????????567??2008-12-16?10:43??停車場問題實驗源程序\UseClass.java
?????目錄??????????0??2009-01-01?15:16??停車場問題實驗源程序
-----------?---------??----------?-----??----
????????????????21655????????????????????13
評論
共有 條評論