Question: I have this code:

```
new Thread(new Runnable() {

    @Override
    public void run() {
        //implement
    }

});

```

My IDE(intellij) suggest to use:

```
new Thread(() -> {
    //implement
});

```

This guarantee is the same thing? I ask this because class [Thread](https://docs.oracle.com/javase/7/docs/api/java/lang/Thread.html#Thread()) has multiple constructors.

Answer: 
Yes, it's a similar thing. Both the representation would call the [`Thread(Runnable runnable)`](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Thread.html#%3Cinit%3E(java.lang.Runnable)) constructor. 

The later code in your question

```
() -> { //implement }

```

is a ***lambda representation*** of the ***anonymous class*** in the code previous to it :

```
new Runnable() {
    @Override
    public void run() {
        //implement
    }
}

```
It is similar, but not the exactly same thing. It behaves the same way in all the regular cases. Some methods access their stack (trace). Those might yield different results.