黑马训练营——多线程之创建线程

来源:互联网 发布:推广必备软件 编辑:程序博客网 时间:2024/04/26 20:19

------- android培训、java培训、期待与您交流! ----------

如何在自定义代码中自定义一个线程?(三种方式)

第一种:创建线程的第一种方式,继承Tread类。(必训复写run()方法)

1:定义类继承Tread类,

2:复写run()方法

   目的:将自定义的代码存储在run方法,让线程运行。

3.调用线程的start方法:

  作用:1)启动线程

            2)调用run方法

运行线程每次都不一样的原因:

因为多个线程都获取cpu资源。cpu 执行到谁谁就运行,在某一时刻只能一个程序在运行,多线程相互抢夺cpu执行权,这是多线程的一个特性:随机性;

覆盖run()方法的原因:

  Thread类用于描述线程,该类就定义了一个功能,用于存储线程要运行的代码,该存储功能就是run方法。也就是说Thread类中的run方法用于存储线程要运行的代码。

 

start()方法:开启线程并执行该线程的run()方法;

 

多线程的状态:有新建状态,就绪状态 ,运行状态,阻塞状态,终止状态;

static Thread  currentThread()用于获取当前的线程对象,

getName()用于获取线程名称;

setName()或构造方法用于设置线程名称;

 

第二种定义线程的方法:声明实现接口Runnable的类:

步骤:

1.定义实现Runnable接口的类;

2.实现Runnable接口中的run()方法:将线程要运行的代码存在该方法中;

3.通过Thread类建立线程对象;

4.将Runnable接口子类对象作为Thread类的参数传给Thread类的构造方法;

          为什么要将Runnable接口的子类对象作为实参传给Thread类的构造方法?

      因为自定义的run()方法所属对象的子类对象所以要用线程去指定对象的run()方法,就必须明确该run()方法所属的对象;

5.函数Thread类的start方法开启线程并调用Runnable接口子类;

 

 

实现方式和继承方式有什么区别?

   实现方式的好处:实现了单继承的局限性,在定义线程时,建议使用实现方式

   继承Thread:线程代码存放在Thread的子类的run()方法中,

   实现Runnable:线程代码存放在接口的子类的run()方法中;

 

   第三种方式:使用callable和Future创建线程

     从Java 5 开始Java提供了Callable接口,他提供了一个call()方法可以作为线程的执行体,但是call()比run()方法功能更强大,

        1.Call方法可以有返回值;

        2. Call方法可以声明抛出异常。

  Java5 提供了Future接口来代表Callable接口里的call()方法的返回值,并为Future接口提供了一个FutureTask实现类,实现了Future和Runnable接口可以

做为Thread构造方法的实参。

------- android培训、java培训、期待与您交流! ----------

原创粉丝点击