java多线程

创建一个线程

Java 提供了三种创建线程的方法:

通过继承 Thread 类本身;

java 复制代码
public class MyThread extends Thread{
    // 重写run方法  里面放要执行的代码
    @Override
    public void run() {
        for (int i = 0; i < 100; i++){
            System.out.println("线程" + Thread.currentThread().getName() + "运行,i = " + i);
        }
    }
}
java 复制代码
public class ThreadDemo {
    public static void main(String[] args) {
        MyThread t1=new MyThread();
        MyThread t2 = new MyThread();

        t1.setName("线程1");
    
        t2.setName("线程2");
    
        t1.start();
    
        t2.start();
    
    }

}

通过实现 Runnable 接口;

1.自定义一个类实现Runnable接口

2.重写run方法

3.创建自己的类对象

4.创建一个Thread类的对象,并开启线程

java 复制代码
public class MyRun implements Runnable{
    @Override
    public void run(){
        for (int i = 0; i < 100; i++){

            System.out.println("线程" + Thread.currentThread().getName() + "运行,i = " + i);
        }
    }

}
java 复制代码
public class ThreadDemo2 {
    public static void main(String[] args) {
        // 创建线程任务
        MyRun run=new MyRun();
        // 创建线程
        Thread t = new Thread(run);
        t.setName("线程1");
        t.start();

    }

}

通过 Callable 和 Future 创建线程。

可以获得多线程运行的结果

java 复制代码
import java.util.concurrent.Callable;

public class MyCallable implements Callable<Integer> {
    @Override
    public Integer call()throws Exception {
        //求1-100之间的和
        int sum=0;
        for(int i=1;i<=100;i++){
            sum+=i;
        }
        return sum;
    }
}
java 复制代码
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

public class ThreadDemo3  {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //创建MyCallable对象(表示多线程要执行的任务)
        MyCallable mc = new MyCallable();
        //创建一个FutureTask对象(作用管理多线程运行的结果)
        FutureTask<Integer> ft=new FutureTask(mc);
        //创建线程对象
        Thread t1=new Thread(ft);
        //启动线程
        t1.start();
        //获取线程运行结果
        Integer result=ft.get();
        System.out.println(result);
    
    }

}

守护线程

作用在于主线程结束后,自动结束

复制代码
t2.setDaemon(true);

出让线程

复制代码
Thread.yield();  
使得重新抢夺线程 ,让执行更均匀一些

插入线程

复制代码
t1.join();  将t1插入让此进程先执行
相关推荐
做萤石二次开发的哈哈2 分钟前
萤石开放平台 萤石可编程设备 | 设备 Python SDK 使用说明
开发语言·网络·python·php·萤石云·萤石
子有内涵4 分钟前
【C++】红黑树实现
开发语言
降临-max9 分钟前
JavaWeb企业级开发---Mybatis
java·开发语言·笔记·学习·mybatis
bing.shao9 分钟前
golang 做AI任务链的优势和场景
开发语言·人工智能·golang
我是一只小青蛙88815 分钟前
位图与布隆过滤器:高效数据结构解析
开发语言·c++·算法
好好研究33 分钟前
SpringBoot注解的作用
java·spring boot·spring
Object~36 分钟前
4.const和iota
开发语言·前端·javascript
Libby博仙1 小时前
Spring Boot 条件化注解深度解析
java·spring boot·后端
willingli1 小时前
c语言经典100题 61-70题
c语言·开发语言·算法
我是小疯子661 小时前
深入解析C++右值引用与移动语义
java·开发语言·算法