1.继承Thread类
2.它接收一个 Runnable 接口,我们只需要提供一个 Runnable接口,并重写run方法即可。
public class Test3 {
public static void main(String[] args) {
new Thread(new Music()).start();
}
}
class Music implements Runnable {
@Override
public void run() {
while (true) {
System.out.println("唱歌..");
}
}
}
3.实现Callable接口
Callable接口实现多线程的方式比较复杂,但是却能解决不少问题,实现流程如下。 创建Callable接口的实现类 ,并实现Call方法 创建Callable实现类的实现,使用FutureTask类包装Callable对象,该FutureTask对象封装了 Callable对象的Call方法的返回值 使用FutureTask对象作为Thread对象的target创建并启动线程 调用FutureTask对象的get()来获取子线程执行结束的返回值
package com.wzk.unit1;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
public class futureTask {
public static void main(String[] args) {
Callable<String>myCallAble = new shopping();
FutureTask<String> futureTask = new FutureTask<>(myCallAble);
Thread thread = new Thread(futureTask);
thread.start();
Map<String,Object>m=new HashMap<>();
try {
String s = futureTask.get();
System.out.println(s);
}catch (Exception e){
e.printStackTrace();
}
}
}
class shopping implements Callable<String>{
@Override
public String call() throws Exception {
Thread.sleep(10000);
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new
Date()) + "空调送到家啦";
}
}