A. java中用連等號創建實例
tail=head=new Link();這樣創建的實例是tail和head兩個句柄都指向同一個堆內存中的對象。而後面一種則是創建了兩個不同的堆內存對象!
B. java 什麼是單向鏈表 和 雙向鏈表
鏈表是類似一種數據結構的東西,就是分別存放有地址以及數據單項鏈表一般是上一個存放地址的地方存放下一個節點的地址,而雙向的就是有兩個存放地址的地方,分別存上一個以及下一個的地址。大概是這樣子
C. 弱問,用java怎麼實現linux的tail功能
深圳遠標幫助你:
採用java實現Linux Tail 功能信息,直接代碼:
1.LogFileTailerListener是變化內容輸入,
public abstract interface LogFileTailerListener {
public abstract void newLogFileLine(String line);
}
2.LogFileTailer 對文件監聽
public class LogFileTailer extends Thread {
private long sampleInterval = 9000;
private File logfile;
private boolean startAtBeginning = false;
private boolean tailing = false;
private Set listeners = new HashSet();
public LogFileTailer(File file) {
this.logfile = file;
}
public LogFileTailer(File file, long sampleInterval,
boolean startAtBeginning) {
this.logfile = file;
this.sampleInterval = sampleInterval;
this.startAtBeginning = startAtBeginning;
}
public void addLogFileTailerListener(LogFileTailerListener l) {
this.listeners.add(l);
}
public void removeLogFileTailerListener(LogFileTailerListener l) {
this.listeners.remove(l);
}
protected void fireNewLogFileLine(String line) {
for (Iterator i = this.listeners.iterator(); i.hasNext();) {
LogFileTailerListener l = (LogFileTailerListener) i.next();
l.newLogFileLine(line);
}
}
public void stopTailing() {
this.tailing = false;
}
public void run() {
long filePointer = 0;
if (this.startAtBeginning) {
filePointer = 0;
} else {
filePointer = this.logfile.length();
}
try {
RandomAccessFile file = new RandomAccessFile(logfile, "r");
while (this.tailing) {
long fileLength = this.logfile.length();
if (fileLength < filePointer) {
file = new RandomAccessFile(logfile, "r");
filePointer = 0;
}
if (fileLength > filePointer) {
file.seek(filePointer);
String line = file.readLine();
while (line != null) {
this.fireNewLogFileLine(line);
line = file.readLine();
}
filePointer = file.getFilePointer();
}
sleep(this.sampleInterval);
}
file.close();
} catch (IOException e) {
} catch (InterruptedException e) {
}
}
public void setTailing(boolean tailing) {
this.tailing = tailing;
}
D. 為什麼JAVA鏈表中head和tail多用protected定義
為了代碼安全性。
protected是私有的,只能本類調用,其他類或其他程序沒法調用該方法。
E. 初學java,能解釋一下這個題什麼意思么
你接觸過 Unix/Liniux 的tail命令嗎?
tail這個命令相當於一個windows上的 exe 程序,不過要帶參數運行
這個題目的意思 就是讓寫個程序,在cmd下執行,比如執行 Java Tail test.txt 3
來顯示 test.txt 文件的最後3行,
1 例子就是 Java Tail test.txt 3 實現輸出 test.txt 的最後3行,其中 這個3 也就是參數了
2 Java Tail test.txt 實現輸出test.txt的後10行,10是你設定的默認值
3 如果 test.txt 這個文件不存在,或是路徑不正確,那麼如何進行異常處理
4 不用解釋了吧,就是1步驟的具體實現,同1
5 就是如何在cmd上正確顯示結果
F. java 什麼情況下使用 並發隊列
並發隊列是一個基於鏈接節點的無界線程安全隊列,它採用先進先出的規則對節點進行排序,當我們添加一個元素的時候,它會添加到隊列的尾部,當我們獲取一個元素時,它會返回隊列頭部的元素。它採用了「wait-free」演算法來實現,該演算法在Michael
& Scott演算法上進行了一些修改。
入隊列
入隊列就是將入隊節點添加到隊列的尾部。為了方便理解入隊時隊列的變化,以及head節點和tair節點的變化,每添加一個節點我就做了一個隊列的快照圖。
publicEpoll(){
Node</e><e>h=head;
//p表示頭節點,需要出隊的節點
Node</e><e>p=h;
for(inthops=0;;hops++){
//獲取p節點的元素
Eitem=p.getItem();
//如果p節點的元素不為空,使用CAS設置p節點引用的元素為null,如果成功則返回p節點的元素。
if(item!=null&&p.casItem(item,null)){
if(hops>=HOPS){
//將p節點下一個節點設置成head節點
Node</e><e>q=p.getNext();
updateHead(h,(q!=null)?q:p);
}
returnitem;
}
//如果頭節點的元素為空或頭節點發生了變化,這說明頭節點已經被另外一個線程修改了。那麼獲取p節點的下一個節點
Node</e><e>next=succ(p);
//如果p的下一個節點也為空,說明這個隊列已經空了
if(next==null){
//更新頭節點。
updateHead(h,p);
break;
}
//如果下一個元素不為空,則將頭節點的下一個節點設置成頭節點
p=next;
}
returnnull;
}
首先獲取頭節點的元素,然後判斷頭節點元素是否為空,如果為空,表示另外一個線程已經進行了一次出隊操作將該節點的元素取走,如果不為空,則使用CAS的方式將頭節點的引用設置成null,如果CAS成功,則直接返回頭節點的元素,如果不成功,表示另外一個線程已經進行了一次出隊操作更新了head節點,導致元素發生了變化,需要重新獲取頭節點。
G. 求一個java列表(List)元素個數輸出的程序補全
//Q1
staticintlength(ListStringelement){
intlength=0;
while(element!=null){
++length;
}
returnlength;
}
H. java ConcurrentLinkedQueue succ 詳解 tail 指向自己
「自己」是說什麼?把自己用錯的地方說清楚...
同步鏈表隊列,是先進先出的隊列,用好就行。
I. java runtime運行tail 沒有結果
不是已經把結果重定向到tail.log中了嘛,看這個文件