This version we further improve the speed by using multi-threading.

We wrap the core component of image signature as a class implementing
the runnable interface. Each feature channel is thus computed parallely.
The time of each frame can be reduced to half or even one third.

Some classes learned:
1. the Thread object can be only run once. To have the component run
multiple times with only one instaniating (e.g., instaniating the
components is expansive), we can implement the Runnable interface and
then wrap the Runnable object by newly created Thread.
2. to manage the multiple threads, we need to use the join() method.
However, join() method only creates some signal, it does NOT start the
method. So we have to start the threads, and after all the threads is
finished, we join all the threads. Check
http://javahowto.blogspot.com/2007/05/when-to-join-threads.html for more
details.