场景:
关键词:java多线程使用
需求:得到数据库里某个字段被上面关键词包含的数据,如:多线程、使用、java
多线程比对的工具类
package com.utils.mongo;
import org.bson.Document;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import com.mongoutil.MongoDBUtil;
import groovy.transform.Synchronized;
/**
* 针对mongo数据库字段全包含多线程查询工具类
*
* @author leo.li
*
*/
public class FullInclusionUtil implements Runnable {
private int start = 0;
private int limit = 0;
private String myWord = "";
MongoCollection<Document> coll = null;
public FullInclusionUtil(String dbName, String collName, int start, int end) {
this.start = start;
this.limit = end;
coll = MongoDBUtil.instance.getCollection(dbName, collName);
}
@Override
public void run() {
quyerMongo();
}
@Synchronized
private void quyerMongo() {
MongoCursor<Document> cursor = coll.find().skip(start).limit(limit).iterator();
System.out.println(Thread.currentThread().getName());
int i = 0;
while (cursor.hasNext()) {
i++;
if (QueryStart.result) {
System.out.println(Thread.currentThread().getName() + "停止" + i);
return;
}
String keyword = cursor.next().getString("keyword");
System.out.println(Thread.currentThread().getName() + "\t查到结果\t" + keyword + i);
if (keyword.contains(myWord) || myWord.contains(keyword)) {
QueryStart.result = true;
System.out.println(Thread.currentThread().getName() + "\t匹配结果\t" + keyword + i);
}
}
}
}
需要将数据查询到内从中,所以我使用了多线程可以快一点
package com.utils.mongo;
public class QueryStart {
public volatile static boolean result = false;
public static void main(String[] args) {
FullInclusionUtil full1 = new FullInclusionUtil("mycol", "emotion", 0, 500);
Thread thread1 = new Thread(full1, "现程1");
thread1.start();
FullInclusionUtil full2 = new FullInclusionUtil("mycol", "emotion", 500, 500);
Thread thread2 = new Thread(full2, "现程2");
thread2.start();
}
}