java多线程并发

java笔记

多线程并发

无论是继承Thread类重写run()方法、实现函数式接口Runnable的run()方法、实现函数式接口Callable的V call()方法。其底层代码都是调用java的Thread类的start()方法开启多线程。

方式一:不使用线程池启动
  1. 继承Thread类方式

    public class ThreadA extends Thread{
        @Override
        public void run(){
            System.out.println("继承Thread类方式-多线程启动");
        }
    }
    
    public static void main(String[] args) throws Exception{
        //启动线程
        new ThreadA().start();
    
  2. 实现函数式接口Runnable方式

    //实现run方法
    Runnable runnable = new Runnable(){
        @Override
        public void run(){
            System.out.println("实现run方法-不带返回值");
        }
    };
    //开启多线程
    new Thread(runnable).start();
    
  3. 实现函数式接口Callable方式

     //使用泛型。因此方法带返回值,这里指定了String类型
    Callable<String > callableStr = new Callable<String >(){
        @Override
        public String call(){
            return "带返回值,有回调函数";
        }
    };
    //因为需要含有run方法,但是此Callable接口没有run。所以需要使用FutureTask类封装一下
    FutureTask<String> stringFutureTask = new FutureTask<>(callableStr);
    //启动多线程
    new Thread(stringFutureTask).start();
    //检测执行结果,回调函数
    String result = stringFutureTask.get();
    
方式二:使用Executors线程池启动
线程池创建分为4种: 
*1、newCachedThreadPool创建一个可缓存线程池 
*2、newFixedThreadPool 创建一个定长线程池 
*3、newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行
*4、newSingleThreadExecutor 创建一个单线程化的线程池

  1. 创建线程池

    //创建缓存类型线程池
    ExecutorService es = Executors.newCachedThreadPool();
    
  2. 执行不含返回值的线程

    //创建线程  使用lambda,也可使用匿名类
    Runnable runFun = ()->{
        System.out.println("可以是Thread继承类或者Runnable实现类");
    };
    //启动多线程。此方法只接收Runnable接口类型。(只接受含有run方法的类)
    es.execute(runFun);
    
  3. 执行含返回值的线程

    //创建Callable线程
    Callable<String > stringCallable = ()->{
        return "执行call方法,并返回值";
    };
    //开启线程
    Future<String> future = es.submit(stringCallable);
    //回调函数,获取返回值
    String results = future.get();
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值