首页 > 其他 > 详细

并发学习第一篇——Runnable

时间:2021-02-23 23:27:24      阅读:27      评论:0      收藏:0      [点我收藏+]
@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的关系和对比留在下一个章节

 

并发学习第一篇——Runnable

原文:https://www.cnblogs.com/yb38156/p/14434519.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!