You
can create a thread using either of below ways.
a. Extending a Thread class
b. Implementing a Runnable interface.
Extending a Thread
class
Application.java
package com.sample.app; import java.util.concurrent.TimeUnit; public class Application { private static class PrinterThread extends Thread { private int counter = 1; public void run() { while (true) { System.out.println("PrinterThread : " + counter++); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String args[]) { PrinterThread thread = new PrinterThread(); thread.start(); } }
Output
PrinterThread
: 1
PrinterThread
: 2
PrinterThread
: 3
PrinterThread
: 4
PrinterThread
: 5
PrinterThread
: 6
PrinterThread
: 7
...........
...........
...........
Implementing Runnable
interface
Application.java
package com.sample.app; import java.util.concurrent.TimeUnit; public class Application { private static class PrinterTask implements Runnable { private int counter = 1; public void run() { while (true) { System.out.println("PrinterThread : " + counter++); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String args[]) { Thread thread = new Thread(new PrinterTask()); thread.start(); } }
Output
PrinterThread
: 1
PrinterThread
: 2
PrinterThread
: 3
PrinterThread
: 4
PrinterThread
: 5
PrinterThread
: 6
PrinterThread
: 7
.............
.............
.............
Runnable Vs Thread
class
a.
Since Java do not support multiple inheritance, once you create a thread by
extending Thread class, you can't extend other class. But if you create a
thread by implementing Runnable interface, you have an option to extend other
class.
b.
Many threads can share same runnable instance.
Application.java
package com.sample.app; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicInteger; public class Application { private static class PrinterTask implements Runnable { private AtomicInteger counter = new AtomicInteger(); public void run() { while (true) { System.out.println(Thread.currentThread().getName() + " => " + counter.incrementAndGet()); try { TimeUnit.SECONDS.sleep(2); } catch (InterruptedException e) { e.printStackTrace(); } } } } public static void main(String args[]) { PrinterTask task = new PrinterTask(); Thread thread1 = new Thread(task); thread1.setName("Thread1"); Thread thread2 = new Thread(task); thread2.setName("Thread2"); Thread thread3 = new Thread(task); thread3.setName("Thread3"); thread1.start(); thread2.start(); thread3.start(); } }
Sample Output
Thread3
=> 2
Thread2
=> 3
Thread1
=> 1
Thread2
=> 6
Thread1
=> 4
Thread3
=> 5
Thread3
=> 7
Thread1
=> 8
Thread2
=> 9
Thread3
=> 10
Thread1
=> 11
Thread2
=> 12
.......
.......
.......
You may like
No comments:
Post a Comment