title: How does a lambda replacing an Anonymous new Runnable() work?
body: <p>When you write an anonymous <strong>Runnable</strong> such as:</p>
  
  <pre><code>Thread producer = new Thread(new Runnable() {
        @Override
        public void run() {
          // do something
        }
  });
  </code></pre>
  
  <p>IntelliJ suggests to replaces it with the following lambda:</p>
  
  <pre><code>Thread producer = new Thread(() -&gt; {
         // do something
      }
  });
  </code></pre>
  
  <p>which works just as fine.</p>
  
  <p>How exactly does this work? In particular:</p>
  
  <ol>
  <li>The constructor used is still <code>Thread(Runnable target)</code>, but nothing in the lambda appears to indicate that it's a Runnable.</li>
  <li>Why <code>@Override public void run()</code> is suddenly not needed any more?</li>
  </ol>