- 只有Thread代表线程,那么Runnable呢?
- Runnable代表一个[任务];
- 可以被任何一个线程执行;
public static void main(String[] args) throws InterruptedException {
//创建线程的方法:方法一
//构造函数java.lang.Thread#Thread(java.lang.Runnable)
// Runnable只是一个任务,交给哪个线程执行都可以
new Thread(() -> {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}).start();
//创建线程的方法:方法二
//构造函数java.lang.Thread#Thread(),创建了匿名内部类,覆盖了Thread.run()方法;
new Thread() {
@Override
public void run() {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}.start();
}
ps:Thread 实现了 Runnable 接口;
/**
* When an object implementing interface <code>Runnable</code> is used
* to create a thread, starting the thread causes the object's
* <code>run</code> method to be called in that separately executing
* thread.
* <p>
* The general contract of the method <code>run</code> is that it may
* take any action whatsoever.
*
* 当一个类实现Runnable接口取创建线程,启动该线程会导致在该单独执行的线程中调
* 用对象的run方法.
* 一般run方法可以采取任何操作;
*/
java.lang.Runnable#run 注释
线程池/线程的关系:
因为线程的创建非常昂贵,而线程池可以提前进行储备,当任务需要执行时,直接使用线程池中的线程即可;
java.util.concurrent.ExecutorService#submit(java.lang.Runnable)
在线程池中提前储备一个任务,这个任务未来被谁执行,如何执行都不需要关注;
具体实现类,例子:
java.util.concurrent.Executors#newCachedThreadPool()
java.util.concurrent.Executors#newSingleThreadScheduledExecutor()
- 什么是Callable?
- Runnable的限制
- 不能返回值;
- 不能抛出checked exception;
- Callable解决了这些限制问题;
Runnable和Callable没有本质的区别,都是一个抽象的[任务],与线程没有关系,一个线程可以选择执行这些任务;区别如上;
网友评论