自分で書いたコードに対する反省


詳細
コードレビュー
この文章を書いた理由は、昨日、仕事中に業務を終えたときに、組長の要望に応じて自分のコードを書いた結果、その後組長レビューをしていたときに、不足点を発見したので、このブログを書いて記録しました.
あまり話さないで、まず元のコードをつけます.
public class DocValuesWarmUpListener extends AbstractSolrEventListener{
    private static final Logger logger = LoggerFactory.getLogger(DocValuesWarmUpListener.class);
    private List fields;
    public DocValuesWarmUpListener(SolrCore core) {
        super(core);
    }


    @Override
    public void init(NamedList args) {
        super.init(args);
        fields = new ArrayList<>();
        NamedList o;
        if(args != null) {
            o = (NamedList) args.get("fields");
            if(o!=null && o instanceof NamedList) {
                for (int i = 0; i < o.size(); i++) {
                    fields.add((String) o.getVal(i));
                }
            }
        }


    }

    @Override
    public void newSearcher(SolrIndexSearcher newSearcher, SolrIndexSearcher currentSearcher) {
        long start = System.currentTimeMillis();
        ExecutorService executorService = Executors.newFixedThreadPool(fields.size());
        try {
            //          ,           
            for(int i=0;i 
 

, , 6000ms, 400ms 。 , solr softCommit , docValue merge, 。 softComiit docValue 。
, 。 , eventListener, init() solrconfig.xml , newSearcher() docValue 。
, review , , , 。
1: , , docValue , 。 , , , thread.join(), , countDownLatch。 countDownLatch join 。
    countDownLatch join , , , 。 , 。
    join , , countDownLatch , 。
    , A,B,C , 100 A B,C , join countDownLatch 。 ,A B,C 50 , , join , countDownLatch ,
CountDownLatch cdl = new CountDownLatch(2)
//A  
cld.await()
//B    50    
cld.countDown()
//C    50    
cld.countDown()

のコードは を することができて、 は のコードで、 にプログラミングする cld.contDown()をfinallyの に くことに して、1つのスレッドが してデッドロックをもたらすことを けます.
    2つ の は、コードの の にあり、 1 のコードはコードパラメータを く きすぎて、 のコードに されにくく、 のヒントを て、AbstractSolrEventListenerソースコードの み りにinit があり、schema.xmlファイルの パラメータの み りを し、この を として き えることができることを した. な fieldをxmlファイルに します.
    は に の を する.