Teachnique
      CourseRoadmaps
      Login

      OverviewHistoryFeaturesJava 8 - New Featuresvs C++Virtual Machine(JVM)JDK vs JRE vs JVMHello World ProgramEnvironment SetupBasic SyntaxVariable TypesData TypesType CastingUnicode SystemBasic OperatorsCommentsStreamsNew Date-Time API

      Loop ControlDecision Makingif-else Statementswitch statementfor loopfor each Loopwhile Loopdo...while Loopbreak Statementcontinue Statement

      OOPs (Object-Oriented Programming) ConceptsObject and ClassesClass AttributesClass MethodsMethodsVariable ScopesConstructorsAccess ModifiersInheritanceAggregationPolymorphismOverridingMethod OverloadingDynamic BindingStatic BindingInstance Initializer BlockAbstractionEncapsulationInterfacesPackagesInner classesStatic ClassesAnonymous ClassesSingleton ClassWrapper ClassesEnum Class

      Number ClassBoolean classCharacter ClassArraysMath Class

      File ClassCreating FilesWrite To FilesReading FileDelete FilesDirectory OperationsFiles and I/O

      ExceptionsTry Catch BlockTry with ResourcesMultiple Catch BlocksNested Try BlockFinally BlockThrows and Throw | Throw an ExceptionException PropagationBuilt-in ExceptionsCustom Exception

      MultithreadingThread Life CycleCreating a ThreadStarting a ThreadJoining ThreadsNaming a Thread with ExamplesScheduling Threads with ExamplesThread PoolsMain ThreadThread PriorityDaemon ThreadThreadGroup ClassJVM Shutdown Hook

      Thread SynchronizationBlock SynchronizationStatic SynchronizationInter Thread CommunicationThread DeadlockInterrupting ThreadThread ControlReentrant Monitor

      NetworkingSocket ProgrammingURL ProcessingURL ClassURLConnection ClassHttpURLConnection ClassSocket Class with ExamplesGenerics

      Collections FrameworkCollection Interface

      List InterfaceArrayList Class

      Queue InterfaceArrayDeque Class

      Map InterfaceSortedMap Interface

      Set InterfaceSortedSet Interface

      Data Structures Enumeration Interface BitSet Class

      How to Use Iterator?How to Use Comparator?How to Use Comparable?

      RecursionRegular ExpressionsSerializationString ClassJava Arrays - Class

      Feedback

      Submit request if you have any questions.

      Course
      Main Thread

      Java Tutorial

      This Java tutorial is tailored for newcomers, offering a journey from basic principles to complex Java programming techniques. Completing this tutorial equips you with a solid understanding of Java, preparing you for advanced learning. You'll emerge ready to tackle the challenges of becoming a top-tier software engineer, with the skills to innovate and excel in the vast world of software development.

      Main Thread

      Main Thread in Java

      Whenever we run a Java program, main thread is created automatically. This thread is responsible for execution of java program. Java runtime searches for main method to execute and create a main thread based on it. If we're creating multiple threads then all child threads will be spawned from main thread. This main thread is the first thread to be created and is generally the last thread and it is used to perform shut down tasks.

      How to Control Main Thread?

      The main thread is created by the JVM automatically when a program starts. But you can control a Main thread by using different Thread methods and techniques.
      The following are some of the methods for controlling the Main thread.
      • sleep() Method
      • join() Method
      • interrupt() Method

      Example of Java Main Thread

      In this example, we're showing a simple one thread program where we're not declaring any thread and checking the thread name in the program execution.
      package com.tutorialspoint;
      public class TestThread {
      public void printName() {
      System.out.println("Thread Name: " + Thread.currentThread().getName());
      System.out.println("Thread Priority: " +Thread.currentThread().getPriority());
      }
      public static void main(String args[]) {
      TestThread thread = new TestThread();
      thread.printName();
      }
      }

      Output

      Thread Name: main
      Thread Priority: 5

      More Example of Main Thread

      Example

      In this example, we've created a ThreadDemo class which extends Thread class. We're not passing any name to the Thread and it will print the default names assigned to the threads by the system. In main method, we've created two threads. In output, you can check, current thread name is printed as main while threads are created using constructor() method call.
      package com.tutorialspoint;
      class ThreadDemo extends Thread {
      ThreadDemo( ) {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: New");
      }
      public void run() {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i);
      }
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
      }
      public void start () {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
      }
      }
      public class TestThread {
      public static void main(String args[]) {
      ThreadDemo thread1 = new ThreadDemo();
      ThreadDemo thread2 = new ThreadDemo();
      thread1.start();
      thread2.start();
      }
      }

      Output

      Thread: main, State: New
      Thread: main, State: New
      Thread: main, State: Start
      Thread: main, State: Start
      Thread: Thread-0, State: Running
      Thread: Thread-0, 4
      Thread: Thread-0, 3
      Thread: Thread-1, State: Running
      Thread: Thread-1, 4
      Thread: Thread-0, 2
      Thread: Thread-1, 3
      Thread: Thread-0, 1
      Thread: Thread-1, 2
      Thread: Thread-0, State: Dead
      Thread: Thread-1, 1
      Thread: Thread-1, State: Dead

      Example 2

      In this example, we've created a ThreadDemo class which extends Thread class. We're not passing any name to the Thread and it will print the default names assigned to the threads by the system. In main method, we've created two threads. In output, you can check, current thread name is printed as main while threads are created using constructor() method call. In the end of main method, we're printing the state of main thread.
      package com.tutorialspoint;
      class ThreadDemo extends Thread {
      ThreadDemo( ) {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: New");
      }
      public void run() {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running");
      for(int i = 4; i > 0; i--) {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + i);
      }
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
      }
      public void start () {
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start");
      super.start();
      }
      }
      public class TestThread {
      public static void main(String args[]) {
      ThreadDemo thread1 = new ThreadDemo();
      ThreadDemo thread2 = new ThreadDemo();
      thread1.start();
      thread2.start();
      System.out.println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead");
      }
      }

      Output

      Thread: main, State: New
      Thread: main, State: New
      Thread: main, State: Start
      Thread: main, State: Start
      Thread: Thread-0, State: Running
      Thread: main, State: Dead
      Thread: Thread-1, State: Running
      Thread: Thread-0, 4
      Thread: Thread-1, 4
      Thread: Thread-1, 3
      Thread: Thread-1, 2
      Thread: Thread-1, 1
      Thread: Thread-1, State: Dead
      Thread: Thread-0, 3
      Thread: Thread-0, 2
      Thread: Thread-0, 1
      Thread: Thread-0, State: Dead
      In this output, you can check that main thread was finished in earlier stages but threads were still running and finished their execution.