
- Groovy Tutorial
- Groovy - Home
- Groovy - Overview
- Groovy - Environment
- Groovy - Basic Syntax
- Groovy - Data Types
- Groovy - Variables
- Groovy - Optionals
- Groovy - Numbers
- Groovy - Strings
- Groovy - Ranges
- Groovy - Lists
- Groovy - Maps
- Groovy - Dates & Times
Groovy Operators
- Groovy - Operators
- Groovy - Arithmetic Operators
- Groovy - Assignment Operators
- Groovy - Relational Operators
- Groovy - Logical Operators
- Groovy - Bitwise Operators
- Groovy - Spaceship Operator
- Groovy - in Operator
- Groovy - Elvis Operator
- Groovy - Safe Navigation Operator
- Groovy Operator Precedence & Associativity
Control Statements
- Groovy - Decision Making
- Groovy - If Else Statement
- Groovy - Switch Statement
- Groovy - Loops
- Groovy - For Loop
- Groovy - For-in Loop
- Groovy - While Loop
- Groovy - Do While Loop
- Groovy - Break Statement
- Groovy - Continue Statement
Groovy File Handling
- Groovy - File I/O
- Java - Create a File
- Java - Write to File
- Java - Append to File
- Java - Read Files
- Java - Delete Files
- Java - File Properties
- Java - File Existence and Type
- Java - File Size
- Java - File Permissions
- Java - Directories
- Java - Listing Directories
- Java - Filtering Files/Directories
- Java - Deleting Directories
- Java - Renaming Files/Directories
Groovy Error & Exceptions
- Groovy - Exception Handling
- Groovy - try-catch Block
- Groovy - try-with-resources
- Groovy - Multi-catch Block
- Groovy - Nested try Block
- Groovy - Finally Block
- Groovy - throw Exception
- Groovy - Exception Propagation
- Groovy - Built-in Exceptions
- Groovy - Custom Exception
Groovy Multithreading
- groovy - Multithreading
- groovy - Thread Life Cycle
- groovy - Creating a Thread
- groovy - Starting a Thread
- groovy - Joining Threads
- groovy - Naming Thread
- groovy - Thread Scheduler
- groovy - Thread Pools
- groovy - Main Thread
- groovy - Thread Priority
- groovy - Daemon Threads
- groovy - Shutdown Hook
Groovy Synchronization
- groovy - Synchronization
- groovy - Block Synchronization
- groovy - Static Synchronization
- groovy - Inter-thread Communication
- groovy - Thread Deadlock
- groovy - Interrupting a Thread
- groovy - Thread Control
- groovy - Reentrant Monitor
- Groovy - Methods
- Groovy - Methods
- Groovy - Optional parenthesis
- Groovy - Named Arguments
- Groovy - Closures as Arguments
- Groovy - Method Overloading
- Groovy - Method Scope and Visibility
- Groovy - isCase Method
- Groovy - Implicit Return
- Groovy - Variable Arguments
- Groovy - Regular Expressions
- Groovy - Regular Expressions
- Groovy - Defining Regular Expressions
- Groovy - Matcher Object
- Groovy - Regex Tasks
- Groovy - XML
- Groovy - XML
- Groovy - Parsing XML
- Groovy - Creating XML
- Groovy - Modifying XML
- Groovy - Querying XML
- Groovy - Simplified Notation
- Groovy - Closure based Querying
- Groovy - Closure based Creation
- Groovy - JSON
- Groovy - JSON
- Groovy - Parsing JSON
- Groovy - Creating JSON using JsonOutput
- Groovy - Creating JSON using JsonBuilder
- Groovy - Modifying JSON
- Groovy - Error Handling
- Groovy - Handling JSON Arrays
- Groovy - JSON Array Operations
- Groovy - JSON Objects
- Groovy - JSON Object Operations
- Groovy - Generics
- Groovy - Generics
- Groovy - Declaring Generic Types
- Groovy - Bound Type Parameters
- Groovy - Wild Cards
- Groovy - Miscellaneous
- Groovy - Object Oriented
- Groovy - Closures
- Groovy - Annotations
- Groovy - JMX
- Groovy - DSLS
- Groovy - Database
- Groovy - Builders
- Groovy - Command Line
- Groovy - Unit Testing
- Groovy - Template Engines
- Groovy - Meta Object Programming
- Groovy Useful Resources
- Groovy - Quick Guide
- Groovy - Useful Resources
- Groovy - Discussion
Groovy - Starting a Thread
Starting a Thread
Once a Thread object is created, you can start it by calling start() method, which executes a call to run() method. Following is a simple syntax of start() method −
void start();
Syntax - Starting a Thread
The following is the syntax of starting a thread −
thread_obj.start();
Here, thread_obj is an object to the Thread class, and start() is the method of the Thread class.
Example - Starting a Thread by Implementing Runnable Interface
In this example, we're creating a class RunnableDemo by implementing Runnable interface. RunnableDemo class has run() method implementation. In main class TestThread, we've created the RunnableDemo objects and using those objects we've created two Thread objects. When Thread.start() method is called on each thread objects, threads start processing and program is executed.
Example.groovy
class Example { static void main(String[] args) { RunnableDemo runnableDemo1 = new RunnableDemo( "Thread-1"); RunnableDemo runnableDemo2 = new RunnableDemo( "Thread-2"); Thread thread1 = new Thread(runnableDemo1); Thread thread2 = new Thread(runnableDemo2); thread1.start(); thread2.start(); } } class RunnableDemo implements Runnable { private String threadName; RunnableDemo( String name) { threadName = name; println("Thread: " + threadName + ", " + "State: New"); } void run() { println("Thread: " + threadName + ", " + "State: Running"); for(int i = 4; i > 0; i--) { println("Thread: " + threadName + ", " + i); } println("Thread: " + threadName + ", " + "State: Dead"); } }
Output
The above program produces the following output −
Thread: Thread-1, State: New Thread: Thread-2, State: New Thread: Thread-1, State: Running Thread: Thread-2, State: Running Thread: Thread-1, 4 Thread: Thread-2, 4 Thread: Thread-1, 3 Thread: Thread-2, 3 Thread: Thread-2, 2 Thread: Thread-1, 2 Thread: Thread-2, 1 Thread: Thread-1, 1 Thread: Thread-2, State: Dead Thread: Thread-1, State: Dead
Example - Starting a Thread by Extending Thread Class
Here is the preceding program rewritten to extend the Thread â In this example, we've created a ThreadDemo class which extends Thread class. We're calling super(name) in constructor() method to assign a name to the thread and called super.start() to start the thread processing.
Example.groovy
class Example { static void main(String[] args) { ThreadDemo thread1 = new ThreadDemo( "Thread-1"); ThreadDemo thread2 = new ThreadDemo( "Thread-2"); thread1.start(); thread2.start(); } } class ThreadDemo extends Thread { ThreadDemo( String name) { super(name); println("Thread: " + name + ", " + "State: New"); } void run() { println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running"); for(int i = 4; i > 0; i--) { println("Thread: " + Thread.currentThread().getName() + ", " + i); } println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead"); } void start () { println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start"); super.start(); } }
Output
The above program produces the following output −
Thread: Thread-1, State: New Thread: Thread-2, State: New Thread: main, State: Start Thread: main, State: Start Thread: Thread-1, State: Running Thread: Thread-2, State: Running Thread: Thread-1, 4 Thread: Thread-1, 3 Thread: Thread-1, 2 Thread: Thread-1, 1 Thread: Thread-2, 4 Thread: Thread-2, 3 Thread: Thread-1, State: Dead Thread: Thread-2, 2 Thread: Thread-2, 1 Thread: Thread-2, State: Dead
Example - Start a Thread (with Demonstrating sleep() method)
In this example, we're creating couple of objects of ThreadDemo class which extends Thread class. We're calling super(name) in constructor() method to assign a name to the thread and called super.start() to start the thread processing. Using sleep() method, we're introducing the delay in processing.
Example.groovy
class TestThread { static void main(String[] args) { ThreadDemo thread1 = new ThreadDemo( "Thread-1"); ThreadDemo thread2 = new ThreadDemo( "Thread-2"); thread1.start(); thread2.start(); } } class ThreadDemo extends Thread { ThreadDemo( String name) { super(name); println("Thread: " + name + ", " + "State: New"); } void run() { println("Thread: " + Thread.currentThread().getName() + ", " + "State: Running"); for(int i = 4; i > 0; i--) { println("Thread: " + Thread.currentThread().getName() + ", " + i); try { Thread.sleep(50); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } println("Thread: " + Thread.currentThread().getName() + ", " + "State: Dead"); } public void start () { println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start"); super.start(); } }
Output
The above program produces the following output −
Thread: Thread-1, State: New Thread: Thread-2, State: New Thread: main, State: Start Thread: main, State: Start Thread: Thread-2, State: Running Thread: Thread-1, State: Running Thread: Thread-2, 4 Thread: Thread-1, 4 Thread: Thread-2, 3 Thread: Thread-1, 3 Thread: Thread-2, 2 Thread: Thread-1, 2 Thread: Thread-2, 1 Thread: Thread-1, 1 Thread: Thread-1, State: Dead Thread: Thread-2, State: Dead