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 分钟前
基于Java Springboot旅游信息推荐系统
java·spring boot·旅游
岁月无声code3 分钟前
Spring Boot 牛刀小试 org.springframework.boot:spring-boot-maven-plugin:找不到类错误
java·spring boot·github
不爱学习的YY酱15 分钟前
【计网不挂科】计算机网络第二章< 物理层 >习题库(含答案)
java·数据库·计算机网络
一丝晨光24 分钟前
gcc 1.c和g++ 1.c编译阶段有什么区别?如何知道g++编译默认会定义_GNU_SOURCE?
c语言·开发语言·c++·gnu·clang·gcc·g++
南城花随雪。34 分钟前
Spring框架之装饰者模式 (Decorator Pattern)
java·开发语言·装饰器模式
编程、小哥哥38 分钟前
设计模式之装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)
java·设计模式·装饰器模式
究极无敌暴龙战神X40 分钟前
前端学习之ES6+
开发语言·javascript·ecmascript
虞书欣的61 小时前
Python小游戏24——小恐龙躲避游戏
开发语言·python·游戏·小程序·pygame
FHYAAAX1 小时前
【机器学习】任务十:从函数分析到机器学习应用与BP神经网络
开发语言·python
汉克老师1 小时前
GESP4级考试语法知识(贪心算法(四))
开发语言·c++·算法·贪心算法·图论·1024程序员节