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的关系和对比留在下一个章节

  • 相关阅读:
    线程基础知识归纳
    并发编程情况下几个相应问题简介
    Spring Security的RBAC数据模型嵌入
    Mysql插入中文的字段内容时乱码的解决方法
    部分排序算法总结
    sendEmail 阿里云使用587端口
    linux服务器关闭ipv6 方法
    centos 6.8 安装git 报错
    强大的xargs
    nfs环境搭建报错clnt_create: RPC: Program not registered
  • 原文地址:https://www.cnblogs.com/yb38156/p/14434519.html
Copyright © 2011-2022 走看看