2009-07-26 4 views
2

自分のウェブサイトで回答が見つかりません。 HtmlCleanerがスレッドセーフであるかどうか分かりますか?
私はそれを使用する必要がある複数のスレッドがありますが、HtmlCleanerオブジェクトのインスタンスを安全に再利用できるかどうかはわかりません。
これまでに使ったことがありますか?何か案が?HtmlCleanerスレッドセーフですか?

+0

は大変な仕事である、スレッドセーフ、

ルック例です。 。私はいつもクラスをスレッドセーフではないと考えていますが、著者は明示的にドキュメントを宣言していません。このプロジェクトはフォーラムを持っていますが、おそらく開発者からより良い回答が得られると思います。 – PeterMmm

+1

なぜそれを再利用したいのですか? Javaはオブジェクト指向です。クラスインスタンスが必要な場合は、最初に新しいインスタンスを作成してください。 GCがメモリを解放します。再使用は非常に少数のアプリケーションでは有効です。 – PeterMmm

答えて

1

ソースコードを見ると、いいえ、HtmlCleanerオブジェクトはスレッドセーフではありません。スレッドごとに1つのオブジェクトを使用します。

-1

私の経験はノーです。 HTMLCleanerを数十万のURLのバッチを日常的に解析したり、必要に応じて断続的に解析するいくつかのアプリケーションにHTMLCleanerを使用しました。

単一のHtmlCleanerとDomSerializerを使用して、複数のスレッドを使用して読み込み中に例外がスローされることがあります。

可能であればオブジェクトを再利用する方が好きですが、スレッドライフを再利用するにはもう少しコードを必要としますが、スピードやリソースの使用について気にするならば、私たちはすべてそうすると思います。

ワーカースレッドが常に生きていて、負荷がかかっていて、あまり多くない場合は、プールなしでスレッドレベルで再利用すると意味があります。

常にスレッドを作成している(これはお勧めしません)、スレッドが常に負荷がかかっていない、スレッドがたくさんある、または再利用可能なオブジェクトのインスタンス化時間が重いまたは実行中のリソース消費。

基本的に、プールアプローチを使用すると、アプリケーションは再利用可能なオブジェクトの数を拡大し、ある時点でシステムが必要とする数だけオブジェクトを確保し、リソースの解放を処理し、設定すると、オブジェクトの作成に関連したスタートアップの遅れを回避することができます。

とにかく、私は大規模に作業する傾向があるので、このタイプの最適化はあなたの時間の価値がないかもしれません。私の理論はプールが疑わしい時です。

3

FYI、最新バージョンがあることを主張する:

http://htmlcleaner.sourceforge.net/javause.php#example2

final CleanerProperties props = new CleanerProperties(); 
final HtmlCleaner htmlCleaner = new HtmlCleaner(props); 
final SimpleHtmlSerializer htmlSerializer = 
    new SimpleHtmlSerializer(props); 

// make 10 threads using the same cleaner and the same serializer 
for (int i = 1; i <= 10; i++) { 
    final String url = "http://search.eim.ebay.eu/Art/2-1/?en=100&ep=" + i; 
    final String fileName = "c:/temp/ebay_art" + i + ".xml"; 
    new Thread(new Runnable() { 
     public void run() { 
      try { 
       TagNode tagNode = htmlCleaner.clean(new URL(url)); 
       htmlSerializer.writeToFile(tagNode, fileName, "utf-8"); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    }).start(); 
} 
関連する問題