zoukankan      html  css  js  c++  java
  • 并发学习第一篇——Runnable

    @FunctionalInterface   ----------声明是函数式接口,"有且仅有一个"抽象方法,即下面的run()
    public interface Runnable {
        /**
         * 实现Runnable接口必须覆盖run()方法 
         * 在Thread中调用start()时会自动调用这个run()*/
        public abstract void run();
    }

    源码对Runnbale类的注释翻译大体如下:

    如果一个类的实例需要用Thread去执行,那么这个类应该实现Runnable;

    如果不使用Thread的其他方法,则应尽量选择实现Runnable接口,覆盖run()方法;

    可以通过实例化Thread,并将自身(实现了Runnable)作为参数传递给Thread,而不需要继承Thread

    记笔记:

    1、Runnable没有创建线程实例的能力,仍然是放在Thread中运行

    2、实现Runnable接口后,直接调用run()是不会创建线程的,相当于只是调用了一个普通的run()方法

    3、尽量用实现Runnable接口的方式,放到Thread里启动线程,这样可以起多个线程运行这个run()方法逻辑(共享资源)

    一般用法示例:

    lambda表达式:

    new Thread( () -> System.out.println("hello world") ).start();

    一般写法:

    new Thread(new Runnable() {
        @Override
        public void run() {
            System.out.println("hello world");
        }
    }).start();

    一般步骤:

    //1、实现Runnable接口,覆盖run()
    class MyRunnable implements Runnable{
        public void run(){                                                                                
            ..........
        }
    }
    //2、创建一个Thread实例,并以你的Runnable对象作为入参
    Thread thread = new Thread(new MyRunnable());
    //3、调用Thread实例的start()启动线程
    thead.start();

    上面讲了,实现Runnable,可以让多个线程一起执行run()逻辑

    因此,可以这样子跑三个线程:

    new Thread(new MyRunnable()).start();
    new Thread(new MyRunnable()).start();
    new Thread(new MyRunnable()).start();

    或者

    for(int i=0;i<3;i++){
       new Thread(new MyRunnable()).start();
    }

    或者使用线程池:

    ExecutorService service = Executors.newFixedThreadPool(10);
    for(int i=0;i<3;i++){
       service.submit(new MyRunnable());
    }

    和Thread的关系和对比留在下一个章节

  • 相关阅读:
    c# 中HttpClient访问Https网站
    c# ASP.NET Core2.2利用中间件支持跨域请求
    vs2017 .net core 项目调试浏览器网页闪退Bug
    Docker 共有 13 个管理命令和 41 个通用命令,以下是常用 Docker 命令列表
    在C#中GUID生成的四种格式
    Asp.net Image控件显示Bitmap生成图像
    visual studio code常用插件
    初中历史画卷
    google chrome 浏览器插件
    如何幽默
  • 原文地址:https://www.cnblogs.com/yb38156/p/14434519.html
Copyright © 2011-2022 走看看