标签:抛出异常 获取 dem 开始 ace thread row 模型 main
(1). 继承Thread类。并重写run()方法,该方法无参数,无返回值;
(2). 创建子类实例,并实例化对象;
(3). 通过start()方法启动,注意:不是通过run()方法启动。
public class ThreadDemo extends Thread{
public void run(){
System.out.println("继承Thread创建线程的.");
}
}
public class ThreadAction {
public static void main(String[] args) {
Thread threadDemo=new ThreadDemo();
threadDemo.start();
}
}
(1). 实现Runnable接口,并重新run()方法;
(2). 创建Runnable实现类的实例,并用这个实例作为Thread的target创建线程对象;
(3). 通过start()启动线程。
public class RunnableDemo implements Runnable{
@Override
public void run() {
System.out.println("实现Runnable创建线程的.");
}
}
public class ThreadAction {
public static void main(String[] args) {
RunnableDemo runnableDemo = new RunnableDemo();
Thread thread = new Thread(runnableDemo);
thread.start();
}
}
产生背景:这种创建线程的方式在jdk1.5后出现,目的是弥补上面两种创建线程方式,其中的run()方法不能有返回值,不能抛出异常等问题。
(1). 创建实现Callable的实现类,并实现call()方法;
(2). 创建该实现类的实例(从java8开始可以直接使用Lambda表达式创建Callable对象);
(3). 使用FutureTask类来包装Callable对象,该FutureTask对象封装了Callable对象的call()方法的返回值;
(4). 使用FutureTask对象作为Thread对象的target创建并启动线程(因为FutureTask实现了Runnable接口);
(5). 调用FutureTask对象的get()方法来获得子线程执行结束后的返回值。
public class CallableDemo implements Callable<String> {
@Override
public String call() throws Exception {
return "hello ,我是通过实现Callable接口的方式创建线程。";
}
}
public class ThreadAction {
public static void main(String[] args) {
CallableDemo callableDemo = new CallableDemo();
// 使用FutureTask类来包装Callable对象
FutureTask<String> stringFutureTask = new FutureTask<>(callableDemo);
Thread thread = new Thread(stringFutureTask);
thread.start();
try {
System.out.println(stringFutureTask.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
实现Runnable、Callable接口的方式创建多线程
继承Thread类
标签:抛出异常 获取 dem 开始 ace thread row 模型 main
原文地址:https://www.cnblogs.com/xzy-/p/10921288.html