
- 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 - Naming a Thread
Name a Thread while Implementing a Runnable Interface
If your class is intended to be executed as a thread and is implementing a Runnable interface. You will need to instantiate a Thread object using the following constructor −
Thread(Runnable threadObj, String threadName);
Where, threadObj is an instance of a class that implements the Runnable interface and threadName is the name given to the new 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();
Example - Naming a thread
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-2, 4 Thread: Thread-1, 4 Thread: Thread-2, 3 Thread: Thread-2, 2 Thread: Thread-2, 1 Thread: Thread-1, 3 Thread: Thread-1, 2 Thread: Thread-2, State: Dead Thread: Thread-1, 1 Thread: Thread-1, State: Dead
Naming a Thread while extending a Thread Class
The second way to create a thread is to create a new class that extends Thread class. This approach provides more flexibility in handling multiple threads created using available methods in Thread class. In order to name the thread, we need to call the super class Thread constructor with name.
class ThreadDemo extends Thread { ThreadDemo( String name) { super(name); ... } ... }
Example - Naming a Thread while extending a 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-2, 4 Thread: Thread-2, 3 Thread: Thread-2, 2 Thread: Thread-2, 1 Thread: Thread-1, 3 Thread: Thread-1, 2 Thread: Thread-2, State: Dead Thread: Thread-1, 1 Thread: Thread-1, State: Dead 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-2, 4 Thread: Thread-1, 3 Thread: Thread-2, 3 Thread: Thread-1, 2 Thread: Thread-2, 2 Thread: Thread-1, 1 Thread: Thread-2, 1 Thread: Thread-1, State: Dead Thread: Thread-2, State: Dead
Example - Using default name of Thread
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.
Example.groovy
class TestThread { static void main(String[] args) { ThreadDemo thread1 = new ThreadDemo(); ThreadDemo thread2 = new ThreadDemo(); thread1.start(); thread2.start(); } } class ThreadDemo extends Thread { ThreadDemo( ) { println("Thread: " + Thread.currentThread().getName() + ", " + "State: New"); } public 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"); } public void start () { println("Thread: " + Thread.currentThread().getName() + ", " + "State: Start"); super.start(); } }
Output
The above program produces the following output −
Thread: main, State: New Thread: main, State: New Thread: main, State: Start Thread: main, State: Start Thread: Thread-0, State: Running Thread: Thread-1, State: Running Thread: Thread-0, 4 Thread: Thread-1, 4 Thread: Thread-0, 3 Thread: Thread-1, 3 Thread: Thread-0, 2 Thread: Thread-0, 1 Thread: Thread-1, 2 Thread: Thread-1, 1 Thread: Thread-0, State: Dead Thread: Thread-1, State: Dead