Начало класса NetNewsSuper...
Листинг 9.19. Начало класса NetNewsSuper (NetNewsSuper.java) package com.XmlEcomBook.Chap09;
package com.XmlEcomBook.Chap09;
import java.util.*; import java.io.* ;
public class NetNewsSuper extends java.lang.Thread { static Hashtable nnsHash = new Hashtable() ; static long classLoaded = System.currentTimeMillis();
static long longTime = 1000 * 60 * 60 * 2 ;// two hours static int maxErrCt = 10 ; // source is URL + query, dest is abs //file path, destFname = name // hash stored by complete source string as key static synchronized NetNewsSuper getNetNewsSuper(String source, String destPth, String destFname ){ NetNewsSuper nns = (NetNewsSuper)nnsHash.get( source );
if( nns == null ){ nns = new NetNewsSuper( source, destPth, destFname ) ; nnsHash.put( source, nns );
} return nns ; }
static synchronized void removeNetNewsSuper( String sourceURL ){ Object obj = nnsHash.remove( sourceURL );
if( obj == null ){ System.out.println("removeNetNewsSuper of " + sourceURL + " failed." );
} else { // allow Thread to die ((NetNewsSuper)obj).running = false ; } }
Причина, по который мы сделали класс NetNewsSuper расширением класса Thread, вместо того чтобы реализовать интерфейс Runnable, связана с удобством отладки и управления набором сервлетов. Самое простое — это написать сервлет, который перечисляет все работающие потоки (объекты Thread) в виртуальной машине процессора сервлетов. Вы можете отобразить и имя экземпляра, и результат вызова метода toString.
Как видно из кода конструктора класса, приведенного в листинге 9.20, имя потока устроено таким образом, что включает в себя имя извлекаемого файла. Когда вызывается .конструктор, ему передаются URL-адрес источника, имя папки и имя файла, которые используются для записи данных XML. Поскольку предполагается, что получение нового набора заголовков будет происходить в фоновом режиме, то данный поток получает минимальный приоритет.
Содержание раздела