⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 threadsafetytest.java

📁 Lucene a java open-source SearchEngine Framework
💻 JAVA
字号:
package org.apache.lucene;/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements.  See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License.  You may obtain a copy of the License at * *     http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */import org.apache.lucene.util.*;import org.apache.lucene.store.*;import org.apache.lucene.document.*;import org.apache.lucene.analysis.*;import org.apache.lucene.index.*;import org.apache.lucene.search.*;import org.apache.lucene.queryParser.*;import java.util.Random;import java.io.File;class ThreadSafetyTest {  private static final Analyzer ANALYZER = new SimpleAnalyzer();  private static final Random RANDOM = new Random();  private static Searcher SEARCHER;  private static int ITERATIONS = 1;  private static int random(int i) {		  // for JDK 1.1 compatibility    int r = RANDOM.nextInt();    if (r < 0) r = -r;    return r % i;  }  private static class IndexerThread extends Thread {    private final int reopenInterval = 30 + random(60);    IndexWriter writer;    public IndexerThread(IndexWriter writer) {      this.writer = writer;    }    public void run() {      try {        boolean useCompoundFiles = false;                for (int i = 0; i < 1024*ITERATIONS; i++) {          Document d = new Document();          int n = RANDOM.nextInt();          d.add(new Field("id", Integer.toString(n), Field.Store.YES, Field.Index.UN_TOKENIZED));          d.add(new Field("contents", English.intToEnglish(n), Field.Store.NO, Field.Index.TOKENIZED));          System.out.println("Adding " + n);                    // Switch between single and multiple file segments          useCompoundFiles = Math.random() < 0.5;          writer.setUseCompoundFile(useCompoundFiles);                    writer.addDocument(d);          if (i%reopenInterval == 0) {            writer.close();            writer = new IndexWriter("index", ANALYZER, false);          }        }                writer.close();      } catch (Exception e) {        System.out.println(e.toString());        e.printStackTrace();        System.exit(0);      }    }  }  private static class SearcherThread extends Thread {    private IndexSearcher searcher;    private final int reopenInterval = 10 + random(20);    public SearcherThread(boolean useGlobal) throws java.io.IOException {      if (!useGlobal)        this.searcher = new IndexSearcher("index");    }    public void run() {      try {        for (int i = 0; i < 512*ITERATIONS; i++) {          searchFor(RANDOM.nextInt(), (searcher==null)?SEARCHER:searcher);          if (i%reopenInterval == 0) {            if (searcher == null) {              SEARCHER = new IndexSearcher("index");            } else {              searcher.close();              searcher = new IndexSearcher("index");            }          }        }      } catch (Exception e) {        System.out.println(e.toString());        e.printStackTrace();        System.exit(0);      }    }    private void searchFor(int n, Searcher searcher)      throws Exception {      System.out.println("Searching for " + n);        QueryParser parser = new QueryParser("contents", ANALYZER);      Hits hits =        searcher.search(parser.parse(English.intToEnglish(n)));      System.out.println("Search for " + n + ": total=" + hits.length());      for (int j = 0; j < Math.min(3, hits.length()); j++) {        System.out.println("Hit for " + n + ": " + hits.doc(j).get("id"));      }    }  }  public static void main(String[] args) throws Exception {    boolean readOnly = false;    boolean add = false;    for (int i = 0; i < args.length; i++) {      if ("-ro".equals(args[i]))        readOnly = true;      if ("-add".equals(args[i]))        add = true;    }    File indexDir = new File("index");    if (! indexDir.exists()) indexDir.mkdirs();        IndexReader.unlock(FSDirectory.getDirectory(indexDir));    if (!readOnly) {      IndexWriter writer = new IndexWriter(indexDir, ANALYZER, !add);            Thread indexerThread = new IndexerThread(writer);      indexerThread.start();            Thread.sleep(1000);    }          SearcherThread searcherThread1 = new SearcherThread(false);    searcherThread1.start();    SEARCHER = new IndexSearcher(indexDir.toString());    SearcherThread searcherThread2 = new SearcherThread(true);    searcherThread2.start();    SearcherThread searcherThread3 = new SearcherThread(true);    searcherThread3.start();  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -