线程的三种创建方法
1)继承Thread类, 重写run(方法,run()方法代表线程要执行的任务。
• Thread是一个线程类,位于java.lang包下
构造方法 | 说明 |
---|---|
Thread() | 创建一个线程对象 |
Thread(String name) | 创建一个具有指定名称的线程对象 |
Thread(Runnable target) | 创建一个基于Runnable接口实现类的线程对象 |
Thread(Runnable target,String name) | 创建一个基于Runnable接口实现类,并且具有 指定名称的线程对象。 |
• Thread类的常用方法
方法 | 说明 |
---|---|
public void run() | 线程相关的代码写在该方法中,一般需要重写 |
public void start() | 启动线程的方法 |
public static void sleep(long m) | 线程休眠m毫秒的方法 |
public void join() | 优先执行调用join()方法的线程 |
简单使用
package com.xmaven;
/**
* @ClassName ThreadTest
* @Description TODO Thread线程创建的方式
* @Author Ambition
* @Date 2021/1/19 13:37
* @Version 1.0.0
**/
public class ThreadTest extends Thread{
@Override
public void run() {
System.out.println(getName()+"线程开始执行了!");
}
public static void main(String[] args) {
new ThreadTest().start();
}
}
2)实现Runnable接口, 重写run()方法, run(方法代表线程要执行的任务。
• 只有一个方法run();
• Runnable是Java中用以实现线程的接口,
• 任何实现线程功能的类都必须实现该接口
package com.xmaven;
/**
* @ClassName Test
* @Description TODO Runnable创建线程的方式
* @Author Ambition
* @Date 2021/1/19 13:56
* @Version 1.0.0
**/
class PrintRunnable implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "正在运行");
}
}
public class Test {
public static void main(String[] args) {
PrintRunnable pr = new PrintRunnable();
Thread t1 = new Thread(pr);
t1.start();
}
}
3)实现callable接口, 重写cal()方法, call()作为线程的执行体, 具有返回值,并且可以对异常进行声明和抛出;使用star()方法来
1、创建Callable接口的实现类, 并实现cal()方法, 该cal()方法将作为线程执行体,并且有返回值。
2、创建Callable实现类的实例, 使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
3、使用FutureTask对象作为Thread对象的target创建并启动新线程。
4、调用FutureTask对象的get()方法来获得 子线程执行结束后的返回值。
示例代码
1、创建Callable接口的实现类, 并实现cal()方法
package com.xmaven;
import java.util.concurrent.Callable;
/**
* @ClassName ThirdThread
* @Description TODO
* @Author Ambition
* @Date 2021/1/19 14:05
* @Version 1.0.0
**/
public class ThirdThread implements Callable<String> {
@Override
public String call() throws Exception {
//方法类型可以根据要返回的值的类型进行确定
String str = "多线程创建的第三种形式";
return str;
}
}
2、测试线程
package com.xmaven;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
/**
* @ClassName ThirdThreadTest
* @Description TODO
* @Author Ambition
* @Date 2021/1/19 14:09
* @Version 1.0.0
**/
public class ThirdThreadTest {
public static void main(String[] args) {
Callable<String> call = new ThirdThread();
FutureTask<String> futureTask = new FutureTask<>(call);
Thread thread = new Thread(futureTask);
//启动线程
thread.start();
//获取call方法的返回值,先启动线程才可以获取到Call的返回值;
try {
System.out.println(futureTask.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
}
评论区