Runnable 是接口。
Thread 是类,且实现了Runnable接口。
用法:
一是写一个类继承自Thread类,然后重写里面的run方法,用start方法启动线程
二是写一个类实现Runnable接口,实现里面的run方法,用new Thread(Runnable target).start()方法来启动
这两种方法都必须实现RUN方法,这样线程起动的时候,线程管理器好去调用你的RUN方法.
实现Runnable接口比继承Thread类所具有的优势:
- 适合多个相同程序代码的线程去处理同一资源的情况。(Thead共享变量不安全)
- 可以避免Java中的单继承的限制
- 增加程序的健壮性,代码可以被多个线程共享,代码和数据独立,较好地体现了面向对象的设计思想
- 线程池只能放入实现Runnable 类线程,不能直接放入继承Thread的类
使用情况
在程序开发中只要是多线程肯定永远以实现Runnable接口为主。
用Runnable还是Thread?
无论你使用Runnable还是Thread,都有一个new Thread的过程,效果上最后都是new Thread,然后执行run方法。写法上的区别无非就是你是new Thead还是new你自定义的thread,如果你有复杂的线程操作需求,那就自定义Thread,如果只是简单的在子线程run一下任务,那就自己实现runnable