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中了嘛,看这个文件