Java线程示例

时间:2020-02-23 14:35:15  来源:igfitidea点击:

Thread可以称为 light weight process
Java支持多线程,因此它允许应用程序同时执行两个或者更多个任务。
多线程可以特别有用,当时现在,机器有多个CPU,因此可以同时执行多个任务。

每当我们在Java中调用Main方法时,它实际上都会创建一个主线程。
虽然它也创建了其他线程,但那些与系统有关并且称为守护程序线程。
因此,如果我们希望同时创建更多线程来执行任务,我们可以使用多线程。

线程可以以两种方式创建。

  • 通过扩展线程类
  • 通过实现Runnable接口

通过扩展线程类:

我们可以通过扩展线程类和覆盖运行方法创建自己的线程。
我们需要创建该类的对象,然后调用它上的start()方法以将线程作为不同的线程。

如下创建一个类FirstThread.java。

package org.igi.theitroad.thread;
 
public class FirstThread extends Thread{
 
 public void run()
 {
  System.out.println("Thread is running");
 }
 
}

在上面的程序中,我们通过扩展线程类和覆盖运行方法创建了自己的线程。

创建名为threadexamplemain.java的主类

package org.igi.theitroad.thread;
 
public class ThreadExampleMain {
 
 public static void main(String args[])
 {
  FirstThread ft= new FirstThread();
  ft.start();
 }
 
}

在上面的程序中,我们正在创建FirstThread类的对象并调用启动方法来执行线程。

通过实现Runnable接口:

另一种方式是,我们需要实现Runnable接口和覆盖公共void run()方法。
我们需要实例化程序,将创建的对象传递给Thread构造函数,并在线程对象上调用启动方法以将线程作为不同的线程。
创建一个类firthread.java,如下所示。

package org.igi.theitroad.thread;
 
public class FirstThread implements Runnable{
 
 public void run()
 {
  System.out.println("Thread is running");
 }
 
}

在上面的程序中,我们创建了自己的类并实现了可追溯的接口和覆盖run()方法。

创建名为threadexamplemain.java的主类

package org.igi.theitroad.thread;
 
public class ThreadExampleMain {
 
 public static void main(String args[])
 {
  FirstThread ft= new FirstThread();
  Thread t=new Thread(ft);
  t.start();
 }
 
}

在上面的程序中,我们正在创建一个FirstThread类的对象并将其传递给Thread构造函数并调用Start方法实际执行。
启动方法最终将调用FirstThread类的运行方法。

线程vs runnable哪个更好?

由于以下原因,实现可运行的接口被认为是比扩展线程更好的方法。

  • Java不支持多重继承,因此如果扩展线程类,则无法扩展大多数情况下需要的任何其他类。
  • Runnable接口表示任务,可以使用线程类或者executors的帮助执行。
  • 使用继承时,它是因为要扩展父级,修改或者改进类行为的某些属性。但是,如果我们只是延长线程类以创建线程,因此可能不是建议面向对象编程的行为。