一、知识点
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();
- }