Efficient Multithreaded File Processessing in Java
I didn't look at the specific performance issue you described. However, my general review:

Readability

for (int i = 0; i &lt; (NUM_THREADS - 1); i++) {
    docs.add(completionService.submit(new DocumentConsumer(queue)));
}


Starting at 0 and ending at somevalue - 1. Why don't you start at 1? You don't even do anything with the index, so it's not like it matters.

        e.getCause();e.printStackTrace();


Don't put multiple statements on the same line. It turns your code into a wall of code. You think understanding a wall of text is hard? Try a wall of code...

Naming

Use camelCase for methods and variables. Use PascalCase for types. Use ALL_CAPS for constants. This means that...

int NUM_THREADS = Runtime.getRuntime().availableProcessors();


should be final and

PriorityQueue&lt;Document&gt; Documents = new PriorityQueue&lt;Document&gt;();


should be renamed to documents.

public Document(int id,int Cj, HashMap&lt;String,Integer&gt; termMap){


Should rename Cj to cj. ... And even better would be to rename it to something that explains what it is. Right now I have no idea what a cj is.