Java多线程程序中的Elasticsearch Java API
我在实现多线程的程序中使用ElasticSearchJavaAPI。我用记录创建了我所有的索引和必要的数据库(CouchDB)Java多线程程序中的Elasticsearch Java API,java,multithreading,elasticsearch,Java,Multithreading,elasticsearch,我在实现多线程的程序中使用ElasticSearchJavaAPI。我用记录创建了我所有的索引和必要的数据库(CouchDB) GetResponse getResponse = elasticClient .prepareGet("elastestdb", "elastestdb", "id1" ).execute() .actionGet(); Map<String, Object> source = getResponse.ge
GetResponse getResponse = elasticClient
.prepareGet("elastestdb", "elastestdb", "id1" ).execute()
.actionGet();
Map<String, Object> source = getResponse.getSource();
System.out.println(source);
GetResponse GetResponse=elasticClient
.prepareGet(“elastestdb”、“elastestdb”、“id1”).execute()
.actionGet();
Map source=getResponse.getSource();
系统输出打印项次(来源);
当我直接从函数或使用in函数调用它时,上面的代码可以工作。然而,若我将Java Multi-threading run()方法放入其中,那个么尽管线程正在运行,但它不会执行
public synchronized void run() {
// System.out.println("Worker Thread started");
while (!stopping) { //not stopped
if (!running) { //not running
try {
this.wait(); // wait until notify()
} catch (InterruptedException e) {
// TODO Auto-generated catch block
System.out.println("[Thread " + workerID + "] interrupted");
}
}
else { // Actual code start here
if (!stopping)
{
System.out.println("Im running workerID " + workerID);
GetResponse getResponse = elasticClient
.prepareGet("elastestdb", "elastestdb", "id1" ).execute()
.actionGet();
Map<String, Object> source = getResponse.getSource();
System.out.println(source);
} else {
//Do nothing }
}
}
}
public synchronized void run(){
//System.out.println(“工作线程已启动”);
当(!停止){//未停止时
如果(!正在运行){//未运行
试一试{
this.wait();//等待到notify()为止
}捕捉(中断异常e){
//TODO自动生成的捕捉块
System.out.println(“[Thread”+workerID+“]中断”);
}
}
否则{//实际代码从这里开始
如果(!停止)
{
System.out.println(“Im正在运行workerID”+workerID);
GetResponse GetResponse=elasticClient
.prepareGet(“elastestdb”、“elastestdb”、“id1”).execute()
.actionGet();
Map source=getResponse.getSource();
系统输出打印项次(来源);
}否则{
//什么也不做}
}
}
}
我通过将GetResponse GetResponse作为我启动线程的引用来解决这个问题
在我的主课上
ThreadManager manager;
GetResponse getResponse;
manager.assingThread(getResponse);
在我的线程类
GetResponse getResponse;
public synchronized void setRunning(GetResponse response) {
this.getResponse = response;
}
public synchronized void run() {
getResponse = elasticClient
.prepareGet("elastestdb", "elastestdb", "id1" ).execute()
.actionGet();
System.out.println(source);
}
记录到控制台的输出是什么?你的跑步记录有没有被记录下来?@BirgitMartinelle,有。我一直得到“Im running workerID”+workerID,但它没有执行下面的GetReponse函数,而且run()方法是一个continuos循环(我一直得到Im running workerID…)