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插入让此进程先执行
相关推荐
cfm_291416 分钟前
Spring监听器
java·spring boot·后端
逝水无殇17 分钟前
C# 特性详解
开发语言·后端·c#
SamDeepThinking24 分钟前
Java面向对象在JVM里怎么实现
java·后端·面试
灵晔君1 小时前
【C++】二叉搜索树
开发语言·c++
LongtengGensSupreme1 小时前
C#图像内存高速拷贝:使用Marshal.AllocHGlobal与ArrayPool实现内存拷贝的几个方法
开发语言·数码相机·c#
Java面试题总结1 小时前
Python,单引号和双引号有何区别
开发语言·python
鱼子星_1 小时前
【C++】内存管理:内存分布,new/delete的使用及细节处理,new/delete的底层,定位new表达式
开发语言·c++·笔记
学逆向的1 小时前
汇编——函数
开发语言·汇编·网络安全
咸鱼翻身小阿橙1 小时前
多线程解析
java·开发语言
AOwhisky2 小时前
Python 学习笔记(第四期)——字符串:格式化、操作与文本处理——核心知识点自测与详解
开发语言·笔记·python·学习·列表·元组·字典