您的位置:首页 > 其它

学习笔记―线程返回数据

2013-04-13 14:35 363 查看
一、知识点

1、vector

Vector类在java中实现自动增长的对象数组,相对于ArrayList来说是线程安全的

2、线程中返回数据

节省资源的做法是线程执行完毕,调用主线程中的方法。而不必等待或轮询

定义一个监听器接口Listener

编写线程对象,实现Runnable的run方法,增加addListener方法,用来添加调用该线程的实例(实例均要求实现监听器的方法)

主线程实现Listener接口的回调方法,线程执行完就能通过接口调用实例的方法

二、部分示例代码

public interface DigestListener {
public void digestCalculated(byte[] digest);
}

List listenerList = new Vector();

public synchronized void addDigestListener(DigestListener l){
listenerList.add(l);
}

private synchronized void sendDigest(byte[] digest){
ListIterator iterator = listenerList.listIterator();
while(iterator.hasNext()){
DigestListener dl = (DigestListener) iterator.next();
dl.digestCalculated(digest);
}
}

@Override
public void run() {
try {
FileInputStream in = new FileInputStream(input);
MessageDigest sha = MessageDigest.getInstance("SHA");
DigestInputStream din = new DigestInputStream(in,sha);
while(din.read()!=-1);
din.close();
byte[] digest = sha.digest();
this.sendDigest(digest);
} catch (Exception e) {
e.printStackTrace();
}
}

@Override
public void digestCalculated(byte[] digest) {
this.digest = digest;
System.out.println(this);
}

public static void main(String[] args) {
ListCallbackDigestUserInterface d =
new ListCallbackDigestUserInterface(new File("1.txt"));
d.calculateDigest();
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: