一、学习目标
二、多线程的创建
如何在程序中实现多线程,有哪些方式,各自优缺点。
1、实现Thread类
<1>定义一个子类(随便命名)为MyThread,继承Thread类。重写run()方法。
注意:run()方法里的内容就是我们的新的线程执行的内容。
<2>创建MyThread的对象。
<3>使用对象调用start()方法开启多线程。启动新的线程后还是会执行run()方法。
优点:代码简单
缺点:线程类继承了Thread类,无法继承其他类,不利于扩展。java语言的特点,单继承。
2、实现Runnable接口
<1> 定义MyRunnable类实现Runnable接口,重写run()方法。
<2>创建MyRunnable的任务对象
<3>创建Thread的对象,创建时把MyRunnable的对象传入,让Thread处理。
<4>Thread对象调用start()方法,来开开启多线程。
匿名内部类的方式:
优点:可以继承其他功能丰富的类,实现其他接口,有益于扩展。
缺点:没法直接返回任务方法的返回值。
3、实现Callable接口
获取执行结果的创建线程的方式。
这种方式的实现,实际是双重封装。
<1>得到任务对象
1.定义MyCallable实现Callable<T>接口(如果有返回值,把返回值类型用泛型定义例如Callable<T> )
2.用FutureTask<T>把Callable对象封装成任务对象
<2>把任务对象交给Thread处理
<3>调用Start()方法开启线程。
<4>线程执行结束,通过FutureTask的get方法去获取任务执行的结果。
三、Thread的常用方法
<1>getName()
获取当前线程的名称,默认名称为Thread-索引
<2>setName()
将此线程的名字更改为指定的名称,通过构造器也可以设置。
<3>currentThread()
返回当前正在执行的线程对象的引用
<4>sleep()
让指定线程休眠指定时间,在执行,单位为毫秒