java:多线程

线程(Thread)是一个程序内部的一条执行流程。

程序中如果只有一条执行流程,那这个程序就是单线程的程序。

什么是多线程?

多线程是指从软硬件实现的多条执行流程的技术(多条线程由cpu负责调度执行)。

如何在程序中创建出多条线程?

多线程的创建方式一:继承Thread类继承。

java 复制代码
package Theaddemo1;

public class test {
    public static void main(String[] args) {
        MyThread thread = new MyThread();
        thread.start();
        for (int i = 0; i < 100; i++) {
            System.out.println("主线程:" + i);
        }
    }
}

class MyThread extends Thread {
    @Override
    public void run() {
        for (int i = 0; i < 100; i++) {
            System.out.println("子线程:" + i);
        }
    }
}

多线程创建方法二:实现Runnable接口

java 复制代码
package Theaddemo1;

public class demo2 {
  public static void main(String[] args) {
      Runnable task = new MyRunnable();
      Thread thread = new Thread(task);
      thread.start();

      for (int i = 0; i < 100; i++) {
          System.out.println("主线程:" + i);
      }
  }
   static class MyRunnable implements Runnable
    {
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                System.out.println("子线程:" + i);
            }
        }
    }
}

优点:人物类只是实现接口,可以继承其他类、实现其他接口,扩展性强。

缺点:需要多一个Runnable对象。

多线程创建方法三:实现callable接口

这种最大优点:可以返回线程执行完毕的结果。

java 复制代码
package Theaddemo1;

import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;

public class demo3 {
    public static void main(String[] args) {
        MyCallable task = new MyCallable(100);
        MyCallable task2 = new MyCallable(50);
        FutureTask<String> task3 = new FutureTask<>(task2);
        FutureTask<String> task1 = new FutureTask<>(task);
        Thread thread = new Thread(task1);
        Thread thread2 = new Thread(task3);
        thread.start();
        thread2.start();
        try {
            System.out.println(task1.get());
        } catch (Exception e) {
            e.printStackTrace();
        }
        try {
            System.out.println(task3.get());
        } catch (Exception e) {
            e.printStackTrace();
        }


    }
    static class MyCallable implements Callable<String> {
        private int n;

        public MyCallable(int n) {
            this.n = n;
        }

        @Override
        public String call() throws Exception {
            int sum=0;
            for (int i = 1; i <= n; i++) {
                System.out.println(":" + i);
                sum = n + i;
            }
            return "1到"+ n+"="+sum;
        }

        }
        }

Thread 的常用方法

|--------------------------------------|----------------------------|
| Thread提供的常用方法 | 说明 |
| public void run() | 线程的任务方法 |
| public void start() | 启动线程 |
| public String getName() | 获取当前线程的名称,线程名称默认是Thread-索引 |
| public void setName(String name) | 为线程设置名称 |
| public static Thread currentThread() | 获取当前执行的线程对象 |
| public static void sleep(long time) | 让当前执行的线程休眠多少毫秒后,在继续执行。 |
| public final void join() | 让调用当前这个方法的线程先执行完! |

相关推荐
浮游本尊6 小时前
Java学习第22天 - 云原生与容器化
java
渣哥8 小时前
原来 Java 里线程安全集合有这么多种
java
间彧8 小时前
Spring Boot集成Spring Security完整指南
java
间彧8 小时前
Spring Secutiy基本原理及工作流程
java
Java水解9 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆11 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学12 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole12 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端
华仔啊12 小时前
基于 RuoYi-Vue 轻松实现单用户登录功能,亲测有效
java·vue.js·后端