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() | 让调用当前这个方法的线程先执行完! |

相关推荐
轻抚酸~1 小时前
小迪23年-32~40——java简单回顾
java·web安全
Sirius Wu3 小时前
Maven环境如何正确配置
java·maven
七七&5563 小时前
2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
开发语言·网络·golang
java坤坤3 小时前
GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
开发语言·后端·golang
元清加油3 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
健康平安的活着4 小时前
java之 junit4单元测试Mockito的使用
java·开发语言·单元测试
Java小白程序员4 小时前
Spring Framework :IoC 容器的原理与实践
java·后端·spring
xuTao6675 小时前
Easy Rules 规则引擎详解
java·easy rules
DjangoJason5 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq
m0_480502646 小时前
Rust 入门 KV存储HashMap (十七)
java·开发语言·rust