创建线程
1. 方式一
import org.apache.log4j.Logger;/** * @ClassName CreateThreadOne * @Description 创建线程的方式一 * 继承Thread类创建线程类 * @Author wenqing_liu * @Date 2021/5/12 22:33 */public class CreateThreadOne extends Thread{ private final Logger logger = Logger.getLogger(this.getClass()); @Override public void run() { logger.info("Thread Child !"); }}
2. 方式二
import org.apache.log4j.Logger;/** * @ClassName CreateThreadTwo * @Description 创建线程的方式二 * 实现Runnable接口的run方法 * @Author wenqing_liu * @Date 2021/5/13 22:40 */public class CreateThreadTwo implements Runnable{ private final Logger logger = Logger.getLogger(this.getClass()); @Override public void run() { logger.info("Thread Child"); }}
3. 方式三
package com.wen.thread;import java.util.concurrent.Callable;/** * @ClassName CreateThreadThree * @Description 创建线程的第三种方式 * 使用FutureTask的方式 * @Author wenqing_liu * @Date 2021/5/16 22:55 */public class CreateThreadThree implements Callable<String> { @Override public String call() { return "This is Child Thread!"; }}
4. 三种方式的对比
- 使用继承方式的好处是方便传参,你可以在子类里面添加成员变量,通过set方法设置参数或者通过构造函数进行传递,
- 而如果使用Runnable方式,则只能使用主线程里面被声明为final的变量。不好的地方是Java不支持多继承,如果继承了Thread类,那么子类不能再继承其他类,而Runable则没有这个限制。
- 前两种方式都没办法拿到任务的返回结果,但是Futuretask方式可以。
运行线程