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

相关推荐
莫陌尛.15 小时前
etcd与Nacos功能及场景对比文档
java
麻瓜code16 小时前
【JUC】并发容器:从线程不安全到阻塞队列
java
Tairitsu_H16 小时前
[C++] 拷贝构造还是赋值重载?类默认成员函数细节详解
开发语言·c++·类和对象
goodlook012316 小时前
opencode调用本地模型一(1.18.30版本安装)
开发语言
许彰午16 小时前
50-18个表单控件
java·低代码·架构
白宇横流学长16 小时前
基于springboot的个人博客系统的设计与实现【源码+文档】
java·spring boot
菜鸟~noob23316 小时前
【电子战】第14篇:TOA 定位——圆交汇与到达时间【含matlab代码】
开发语言·matlab
itmigrate17 小时前
Redis 开发高频隐形踩坑记录
开发语言·java-ee
白远山17 小时前
本地游戏代练源码开发实战:架构设计与核心功能实现指南
java·开发语言·架构·需求分析
wno70417 小时前
Spring Security添加图形验证码
java·后端·spring