什么是线程?
线程是程序执行的最小单位,它是进程中的一个控制序列,是CPU调度和分派的基本单位,一个进程中可以有多个线程,这些线程共享进程的资源,如内存、文件等,线程的创建和管理是Java多线程编程的核心内容。
Java创建线程的方式有哪些?
1、继承Thread类
这是最常见的创建线程的方式,首先创建一个类,继承自Thread类,然后重写run()方法,在run()方法中编写线程要执行的任务,最后创建该类的对象并调用start()方法启动线程。
class MyThread extends Thread { @Override public void run() { // 线程要执行的任务 } } public class Main { public static void main(String[] args) { MyThread myThread = new MyThread(); myThread.start(); } }
2、实现Runnable接口
另一种创建线程的方式是实现Runnable接口,首先创建一个类,实现Runnable接口,然后重写run()方法,在run()方法中编写线程要执行的任务,接着创建该类的对象,将其作为参数传递给Thread类的构造函数,最后调用Thread对象的start()方法启动线程。
class MyRunnable implements Runnable { @Override public void run() { // 线程要执行的任务 } } public class Main { public static void main(String[] args) { MyRunnable myRunnable = new MyRunnable(); Thread thread = new Thread(myRunnable); thread.start(); } }
3、使用匿名内部类
还可以使用匿名内部类的方式创建线程,这种方式的优点是代码简洁,缺点是需要为每个线程创建一个匿名内部类实例,直接在方法中创建匿名内部类实例,并将该实例作为参数传递给Thread类的构造函数,然后调用Thread对象的start()方法启动线程。
public class Main { public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { // 线程要执行的任务 } }).start(); } }
4、使用Lambda表达式(仅支持Java 8及以上版本)
从Java 8开始,可以使用Lambda表达式简化创建线程的方式,只需在方法中创建一个Lambda表达式实例,并将该实例作为参数传递给Thread类的构造函数,然后调用Thread对象的start()方法启动线程。
public class Main { public static void main(String[] args) { new Thread(() -> { // 线程要执行的任务 }).start(); } }
优缺点分析
1、继承Thread类的优点:代码结构清晰,易于理解和维护;可以在run()方法中访问当前对象的成员变量和成员方法,缺点是需要实现一个完整的类,增加了代码量。
2、实现Runnable接口的优点:代码结构更简洁,适用于不需要访问当前对象成员变量和成员方法的情况;可以实现多个线程共享同一个Runnable实例,缺点是需要实现一个接口,增加了代码量。
3、使用匿名内部类的优点:代码简洁;适用于只需要运行一次的任务,缺点是需要为每个线程创建一个匿名内部类实例,增加了内存消耗。
4、使用Lambda表达式的优点:代码简洁;适用于只需要运行一次的任务;支持函数式编程,缺点是仅支持Java 8及以上版本,不支持访问当前对象成员变量和成员方法。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/137730.html