标签:hid 基本 技术 call exception 相同 程序代码 future 方式
//继承Thread类 public class MyThread extends Thread{ public void run(){ //重写run方法 } } new MyThread().start();//创建并启动线程 //实现Runnable接口 public class MyThread2 implements Runnable { public void run(){ //重写run方法 } } //创建并启动线程 MyThread2 myThread=new MyThread2(); Thread thread=new Thread(myThread); thread().start(); //实现Callable接口,使用FutureTask包装 FutureTask<String> ft = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { System.out.println("new Thread 3");//输出:new Thread 3 return "aaaa"; } }); Thread t3 = new Thread(ft); t3.start(); String result = ft.get();//法会阻塞,直到子线程执行结束才返回 System.out.println(result);//输出:aaaa }
直接调用线程的run方法时,并不是多线程,只是一个普通顺序方法。必须调用start方法才是多线程的调用方式
3.区别
实现Runnable和实现Callable接口的方式基本相同,不过是后者执行call()方法有返回值,前者线程执行体run()方法无返回值,因此可以把这两种方式归为一种这种方式与继承Thread类的方法之间的差别如下:
<1、线程只是实现Runnable或实现Callable接口,还可以继承其他类。
<2、这种方式下,多个线程可以共享一个target对象,非常适合多线程处理同一份资源的情形。
<3、但是编程稍微复杂,如果需要访问当前线程,必须调用Thread.currentThread()方法。
<4、继承Thread类的线程类不能再继承其他父类(Java单继承决定)。
4.线程状态转换
注:一般推荐采用实现接口的方式来创建多线程
标签:hid 基本 技术 call exception 相同 程序代码 future 方式
原文地址:https://www.cnblogs.com/nzxj/p/10465833.html