一、创建线程的三种方式
1.继承Thread
public class ThreadChild{
public static void main(String[] args) {
Thread thread = new ThreadExtens("Thread-001");
thread.start();
}
}
class ThreadExtens extends Thread{
private String name;
public ThreadExtens(String name) {
super.setName(name);
}
@Override
public void run(){
System.out.println("继承Thread");
}
}
2.Runnable方式
Thread thread2 = new Thread(new Runnable() {
@Override
public void run() {
System.out.println("实现Runnable接口");
}
});
thread2.start();
3.Callable
public class DisplayTime implements Callable<String> {
@Override
public String call() throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(sdf.format(new Date()));
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "返回值";
}
public static void main(String[] args) {
DisplayTime displayTime = new DisplayTime();
FutureTask<String> stringFutureTask = new FutureTask<>(displayTime);
new Thread(stringFutureTask, "线程一").start();
try {
System.out.println("线程的返回值:" + stringFutureTask.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
}
一、创建线程的三种方式
其实上面前两种方式,其实底层使用的都是实现Runnable run();
实现Runnable 不用说是重写 run();
继承Thread 方式的它底层是实现Runnable;
实现Callable 方式其实就是另外一种Runnable而已;
创建线程主要有连个方法:处理业务的run()以及获取cpu资源的start()0方法
处理业务就是Runnable run()方法,我们在实现接口时重写方法,把业务放进去就行
紧接着就是调用这两个方法,Thread start() 方法就是调用这两个方法。