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插入让此进程先执行
相关推荐
WangMing_X几秒前
C# 23种设计模式(4)访问者模式(Visitor Pattern)
开发语言·设计模式·c#·访问者模式
白子寰1 分钟前
【python从入门到精通】-- 第七战:字典
开发语言·python
Sunmanit12 分钟前
异步将用户信息存入 Redis 缓存
java·数据库·redis·缓存
文浩(楠搏万)14 分钟前
Tomcat HTTPS配置、域名解析及Java WAR包打包
java·运维·服务器·nginx·http·https·tomcat
KaiPeng-Nie15 分钟前
代码随想录day21 | leetcode 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 二叉树总结篇
java·数据结构·算法·leetcode·二叉树
愿时间能学会宽恕22 分钟前
SpringBoot后端开发常用工具详细介绍——Minio资源管理器
java·spring boot·后端
一只淡水鱼6624 分钟前
【Spring】Controller层常用注解的介绍和使用
java·后端·spring
Cachel wood35 分钟前
Vue.js前端框架教程2:Vue路由和状态管理库Pinia
java·linux·服务器·前端·vue.js·前端框架·github
小叶子来了啊36 分钟前
day4:tomcat—maven-jdk
java·tomcat·maven
北辰浮光42 分钟前
[maven]使用spring
java·后端·spring