Can we call run() method directly to start a new thread

No, you can not directly call run method to start a thread. You need to call start method to create a new thread.
If you call run method directly , it won’t create a new thread and it will be in same stack as main.Lets understand with the help of example:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

packageorg.arpit.java2blog;

classCustomThreadextendsThread{

publicvoidrun(){

for(inti=0;i<5;i++){

try{

Thread.sleep(300);

}catch(InterruptedExceptione){

e.printStackTrace();

}

System.out.println("Thread is running :"+i);

}

}

}

publicclassStartThreadAgainMain{

publicstaticvoidmain(String[]args){

CustomThread ct1=newCustomThread();

CustomThread ct2=newCustomThread();

ct1.run();

ct2.run();

}

}

When you run above program , you will get below output:

1

2

3

4

5

6

7

8

9

10

11

12

Thread isrunning:0

Thread isrunning:1

Thread isrunning:2

Thread isrunning:3

Thread isrunning:4

Thread isrunning:0

Thread isrunning:1

Thread isrunning:2

Thread isrunning:3

Thread isrunning:4

As you can see when we are directly calling run method, it is not creating new threads.