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的帮助执行。
- 使用继承时,它是因为要扩展父级,修改或者改进类行为的某些属性。但是,如果我们只是延长线程类以创建线程,因此可能不是建议面向对象编程的行为。