title: Java: extending Thread without implementing run()
body: <p>I am a technical writer who knows some Java and I have been tasked with tracing the threads in some old, highly threaded Java code.  The code's original author is not here anymore so we are trying to figure out exactly how it works.  I have come across a class that extends <code>Thread</code> but does not implement a <code>run()</code> method.  What would be the point of extending <code>Thread</code> but not implementing <code>run()</code> (if any)?</p>
  
  <p>I did notice that one of the methods of this class is <code>synchronized</code>:</p>
  
  <pre><code>public synchronized void incrementCounter() {
    this.counter++;
  }
  </code></pre>
  
  <p>but all of the other methods seem to be non-synchronized.  In fact, most of the other methods are just getters and setters.  Is extending <code>Thread</code> or implementing <code>Runnable</code> necessary in order to declare a method <code>synchronized</code>?  Thanks!</p>