浅谈java多线程 (上)

145 阅读2分钟

src=http___nimg.ws.126.net__url=http___dingyue.ws.126.net_2021_0419_a1a10c9cj00qrs9k8004ic000m800etc.jpg&thumbnail=650x2147483647&quality=80&type=jpg&refer=http___nimg.ws.126.jpg

「这是我参与2022首次更文挑战的第1天,活动详情查看:2022首次更文挑战

 前言:工作需要,每天学习一点java知识,写点笔记,记录自己✨。

基础篇

线程

  多线程,这里提到多线程就会有个疑问,什么是线程?🧐
  举个简单的例子:人可以在呼吸的同时,可以同时思考问题、工作等活动,电脑可以被用来听歌、编辑文档、微信聊天,而这些活动的完成,可以同时进行。
  这种同时执行多个操作的"思想" ,在java中被称为并发,而将并发完成的每一件事称为线程\color{#fbbd08}{线程}

多线程

  多线程没问世之前,一个任务完成后再执行下一个任务,这样下一个任务执行,必须要等前一个任务执行完毕才能开始,严重浪费时间资源,java提供了并发机制,允许在程序中执行多个线程(任务),每个线程完成一个任务,并于其他线程并发执行,这种机制被称为多线程。

  1. Java中实现多线程几种方法
  • 继承Thread类; extends Thread
  • 实现Runnable接口; implements Runnable - 一般创建线程方式
  • 实现Callable接口通过FutureTask包装器来创建Thread线程; 备注: 有返回值

 -- 实现Callable接口通过FutureTask包装器来创建Thread线程

  //自定义Callable,与上面一样
    class Task implements Callable<Integer>{
        @Override
        public Integer call() throws Exception {
            //模拟计算需要一秒
            Thread.sleep(1000);
            return 2;
        }
    }
 
    public static void main(String[] args) throws IOException {
       //使用
        ExecutorService executor = Executors.newCachedThreadPool();
        FutureTask<Integer> futureTask = new FutureTask<>(new Task());
        executor.submit(futureTask);
        System.out.println(futureTask.get());
    }
}

对比

1、通过对实例代码可以看出,继承Thread方法是最简洁方便的,直接就可以Start,不需要任何转换<br/>
2、但是Thread有一个很不好的地方就是继承了Thread类后由于java的单继承机制,就不可以继承其他的类了,而如果实现的是接口,就可以实现多个接口,使开发更灵活。
3、实现Runnable接口相对实现Callable接口来说代码更简洁,使用更方便,少了一次转换,实现Callable接口:有返回值、抛出异常。