当前位置:网络安全 > Java创建线程的七种方法,全网最全总结~

Java创建线程的七种方法,全网最全总结~

  • 发布:2023-10-07 12:07

内容

前言

1。继承Thread并重写run方法

2。实现Runnable接口并重写run方法

3。使用匿名内部类创建Thread子类对象

4。使用匿名内部类实现Runnable接口

5。 Lambda 表达式

6。实现 Callable 接口

7。使用线程池创建线程


前言

这是一道基本的面试题,你一定能答对哦~


1。继承Thread并重写run方法

                                                                                                                                                                                     创建一个线程,方法是自定义一个类(这里命名为:MyThread),继承Thread类,重写run方法,最后在main方法中创建一个新的MyThread实例,并调用this的继承Thread类的start方法实例。 。

Ps:

1。创建MyThread实例并不意味着系统中实际创建了一个线程。只有当start方法被调用时,才会创建一个新的线程。新线程会执行run中的逻辑,直到run中的逻辑执行完毕。 ,线程结束;

?主线程和MyThread创建的新线程是“并发执行”关系(并发+并行),也可以理解为同时执行,各自执行自己的;

3。直接调用run并不会创建线程,只是执行原线程中的代码;

代码如下:

class MyThread extends Thread {@Overridepublic void run() {System.out.println("继承Thread,重写run方法创建线程");}undefined
public class Main {public static void main(String[] args) {Thread thread = new Thread() {@Overridepublic void run() {System.out.println("使用匿名内部类创建Thread子类对象" );}};线程.start();}
}

4。使用匿名内部类实现Runnable接口

通过使用匿名内部类,实现Runnable接口作为Thread构造方法的参数,最终通过start创建并启动线程;

代码如下:

public class Main {public static void main(String[] args) {Thread thread = new Thread(new Runnable() {@Overridepublic void run() {System.out.println("使用匿名内部类,实例Runnable接口作为构造参数");}});thread.start();}
}

5。 Lambda 表达式

  Lambda本质上是一个“匿名函数”,()代表函数的形参,{}代表函数体,->特殊语法,表明它是一个lambda表达式(->是从C++复制过来的)。

代码如下:

public class Main {public static void main(String[] args) {Thread thread = new Thread(() -> {System.out.println("使用lambda创建线程");});thread.开始();}}

6.实现Callable接口

undefined}public class Main {public static void main(String[] args) throws ExecutionException, InterruptedException {FutureTask任务 = new FutureTask<>(new MyCallableTest());Thread 线程 = new Thread(task);thread.start ();System.out.println("创建线程的返回结果为:" + task.get());}}

7。使用线程池创建线程

在Java中,线程池的本体称为ThreadPoolExecutor。它的构造方法写起来很麻烦。为了简化构造方法,标准库提供了一系列工厂方法来简化使用;

什么是工厂模式?

                                                                                                                                                                                                                                                创建产品实例的权利转移给工厂。我们不再使用new来创建我们需要的对象,而是使用工厂来获取我们需要的产品。减少产品使用者与用户之间的耦合关系;

也就是说,这里创建线程池没有显式new,而是通过Executors的静态方法newCaChedThreadPool;

常用:

代码如下:

导入java.util.concurrent.ExecutorService;导入 java.util.concurrent.Executors;public class Pool {public static void main(String[] args) {ExecutorService pool = Executors.newCachedThreadPool();pool.submit(new Runnable() {@Overridepublic void run() {/ /执行业务逻辑 for(int i = 1; i <= 100; i++) {System.out.println("Thread:" + Thread.currentThread().getName() + "任务已执行" + i + "~ " );}}});pool.submit(new Runnable() {@Overridepublic void run() {//执行业务逻辑 for(int i = 101; i <= 200; i++) {System.out.println( " Thread:" + Thread.currentThread().getName() + "任务已执行" + i + "~");}}});pool.submit(new Runnable() {@Overridepublic void run() {//执行业务逻辑 for(int i = 201; i <= 300; i++) { System.out.println("Thread:" + Thread.currentThread().getName() + "任务已执行" + i + "~ "); }}});}
}

当任务量达到一定程度,一个线程太忙时,你会发现其他线程来帮忙~


undefined

相关文章

热门推荐