1.线程的创建和启动
Java支持内置的多线程机制。Java语言包中的Runnable接口约定线程的执行方法
Thread类提供创建、管理和控制线程对象的方法
线程的创建通过两种方式:
1.继承Thread类
2.实现Runnable接口
Runnable接口:该接口中只包含了一个run()方法
实现多线程,定义一个类A实现Runnable接口;然后,通过new Thread(new A())等方式新建线程
Thread:是一个类,Thread本身就实现了Runnable接口
Thread常用构造方法:
public Thread() 构造方法
public Thread (String name) name指定线程名
public Thread (Runnable target) target指定线程的目标对象
public Thread (Runnable target,String name)
Thread常用基础方法:
public void run() 描述线程操作的线程体
public final String getName () 返回线程名
public final void setName (String name) 设置线程名
public static int activeCount () 返回当前活动线程数
public static Thread currentThread () 返回当前执行线程对象
public Sting toString() 返回线程的字符串信息,包括名字、优先级和线程组
public void start() 启动已创建的线程对象
通过Thread类创建线程:


MyThread继承于Thread,它是自定义个线程。每个MyThread都会卖出10张票。
主线程main创建并启动3个MyThread子线程。每个子线程都各自卖出了10张票
通过Runnable接口创建线程:


和上面“MyThread继承于Thread”不同;这里的MyThread实现了Runnable接口。
主线程main创建并启动3个子线程,而且这3个子线程都是基于“mt这个Runnable对象”而创建的。运行结果是这3个子线程一共卖出了10张票。这说明它们是共享了MyThread接口的。
Thread类和Runnable接口的异同:
相同点:都是“多线程的实现方式”,线程的运行都是执行run()方法,线程的启动都是start()方法
不同点:
Thread 是类,而Runnable是接口;Thread本身是实现了Runnable接口的类
Java只支持单继承,而支持接口的多实现,因此Runnable接口具有更好的扩展性
Runnable多线程都是基于Runnable对象建立的,所以可以共享Runnable对象上的资源
推荐使用Runnable接口实现多线程
使用Callable接口和Future创建线程:
Java 5开始,Java提供了Callable接口,这个Callable接口像是Runnable接口的增强版本,Callable接口提供了一个call()方法作为线程的执行主体,call()方法比run()方法功能更强大
Callable接口和Runnable接口的区别:
Callable规定的方法是call(),Runnable规定的方法是run()
Callable的任务执行后可返回值,而Runnable的任务是不能返回值得
call方法可以抛出异常,run方法不可以
运行Callable任务可以拿到一个Future对象,表示异步计算的结果。它提供了检查计算是否完成的方法,以等待计算的完成,并检索计算的结果。通过Future对象可以了解任务执行情况,可取消任务的执行,还可获取执行结果
使用Callable接口和Future创建线程:
创建callable接口实现类,并实现call()方法,该call()方法将做线程的执行体,且该call()方法有返回值。
创建Callable实现类的实列,使用FutureTask类来包装Callable对象,该FutureTask对象封装该Callable对象的call()方法的返回值。
使用FutureTask对象作为Thread对象参数创建并启动线程。
调用FutureTask对象的get()方法来获得子线程执行结束后的返回值


本文介绍Java中实现多线程的两种主要方法:继承Thread类和实现Runnable接口。对比这两种方法的特点,并介绍了Callable接口及Future接口在创建线程方面的应用。
10万+

被折叠的 条评论
为什么被折叠?



