JavaSe多线程技术

比眉伴天荒 2023-10-13 09:22 108阅读 0赞

前言

此篇文章属于Java语言必学基础内容

文章目录

目录

一、什么是Java中的多线程技术?

二、创建多线程的七种方式

编辑

  1. 继承Thread类创建编程

2.第二第三第四条可以简写通过新特性:

3.使用callable和Future创建线程:

4.使用线程池Executor框架:



#

提示:以下是本篇文章正文内容,下面案例可供参考

一、什么是Java中的多线程技术?

多线程技术是指在一个程序中同时运行多个线程(也可以理解为多个独立的任务),并且这些线程可以并行执行,从而提高程序的效率和性能。在多线程技术中,每个线程都有自己的代码执行路径、堆栈和局部变量等,但是它们共享进程的地址空间和全局变量等资源。

多线程技术的应用广泛,例如:

  1. 在操作系统中,多线程技术可以用于实现任务调度、I/O操作、网络通信等。

  2. 在图形界面程序中,多线程技术可以用于实现用户界面响应和数据更新等。

  3. 在游戏开发中,多线程技术可以用于实现物理模拟、AI计算、碰撞检测等。

  4. 在服务器开发中,多线程技术可以用于实现并发请求处理、数据库操作等。

需要注意的是,多线程技术也存在一些问题,例如线程安全、死锁、资源竞争等,需要开发人员加以注意和解决。

二、创建多线程的七种方式

" class="reference-link">9c35773300fe457e8bd4ba2396692400.png

注意:

  1. 使用Callable和Future创建线程的优点是可以获取线程的结果,并且可以对线程进行控制和管理,例如取消任务的执行、设置超时等。

  2. 使用线程池是通过复用机制

1. 继承Thread类创建编程

需要注意,线程与线程之间没有不相互影响。

  1. public class Thread01 extends Thread {
  2. @Override
  3. public void run() {
  4. System.out.println(Thread.currentThread()+"<我是子线程>");
  5. try {
  6. Thread.sleep(3000);
  7. } catch (InterruptedException e) {
  8. throw new RuntimeException(e);
  9. }
  10. System.out.println(Thread.currentThread()+"<阻塞完毕>");
  11. }
  12. public static void main(String[] args) {
  13. new Thread01().start();
  14. System.out.println("主线程main执行完毕!");
  15. }
  16. }

运行结果:

e47485656eab41c29180e005b61b9102.png

2.第二第三第四条可以简写通过新特性:

  1. public class Thread02{
  2. public static void main(String[] args) {
  3. new Thread(() -> System.out.println(Thread.currentThread()+"<我是子线程666>")).start();
  4. }
  5. }

3.使用callable和Future创建线程:

在Java中,可以使用Callable接口和Future接口来创建线程。

首先,Callable接口代表了一个可调用的任务,它可以在线程中执行并返回一个结果。该接口定义了一个call()方法,你需要实现这个方法来执行具体的任务逻辑并返回结果。

  1. import java.util.concurrent.Callable;
  2. public class MyCallable implements Callable<String> {
  3. @Override
  4. public String call() throws Exception {
  5. // 执行任务逻辑
  6. return "Task completed";
  7. }
  8. }

接着,使用ExecutorService来创建线程池并提交Callable任务。ExecutorService是Java提供的一个线程池框架,它可以管理线程的生命周期并执行任务。

  1. import java.util.concurrent.ExecutorService;
  2. import java.util.concurrent.Executors;
  3. import java.util.concurrent.Future;
  4. public class Main {
  5. public static void main(String[] args) {
  6. // 创建线程池
  7. ExecutorService executorService = Executors.newSingleThreadExecutor();
  8. // 创建Callable任务
  9. MyCallable callable = new MyCallable();
  10. // 提交任务,并获取Future对象
  11. Future<String> future = executorService.submit(callable);
  12. // 执行其他操作
  13. try {
  14. // 阻塞并等待任务执行完成,并获取结果
  15. String result = future.get();
  16. System.out.println(result);
  17. } catch (Exception e) {
  18. e.printStackTrace();
  19. }
  20. // 关闭线程池
  21. executorService.shutdown();
  22. }
  23. }

4.使用线程池Executor框架:

  1. import java.util.concurrent.ExecutorService;
  2. import java.util.concurrent.Executors;
  3. public class Main {
  4. public static void main(String[] args) {
  5. // 创建固定大小的线程池
  6. ExecutorService executorService = Executors.newFixedThreadPool(5);
  7. for (int i = 0; i < 10; i++) {
  8. // 提交任务给线程池执行
  9. executorService.execute(new MyRunnable(i));
  10. }
  11. // 关闭线程池
  12. executorService.shutdown();
  13. }
  14. }
  15. class MyRunnable implements Runnable {
  16. private int taskId;
  17. public MyRunnable(int taskId) {
  18. this.taskId = taskId;
  19. }
  20. @Override
  21. public void run() {
  22. System.out.println("Task " + taskId + " is executing.");
  23. // 执行具体的任务逻辑
  24. try {
  25. // 假设任务需要一些时间来完成
  26. Thread.sleep(1000);
  27. } catch (InterruptedException e) {
  28. e.printStackTrace();
  29. }
  30. System.out.println("Task " + taskId + " is completed.");
  31. }
  32. }

发表评论

表情:
评论列表 (有 0 条评论,108人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JavaSE 线(2)

    死锁 多线程同步的时候, 如果同步代码嵌套, 使用相同锁, 就有可能出现死锁. 为了避免死锁出现,最好不要同步代码块嵌套。 例子 饭桌上每个人都只有一边筷子,

    相关 JavaSE线

    写这篇文章的前提,楼主从学习java开始,自认为技术不错,反正肯费工夫学,为什么我现在又回来准备写一篇关于多线程文章,说真的,现在谁还用多线程?都是封装过的框架,根本不考虑什么

    相关 javaSE_线

    线程的创建和启动: A:继承Thread类创建线程 1.定义Thread类的子类,并重写run方法。 2.创建对象,调用start方法启动线程.   B:实现Runn

    相关 Javase线(1)

    多线程(1) 多线程的概述 了解多线程之前需要先了解线程,而线程依赖于进程而存在,所以先了解进程。 什么是进程 进程就是正在运行的程序。是系统进行资源分配和