创建线程
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方式可以。
运行线程