黑马程序员_多线程1

来源:互联网 发布:网络平台销售管理 编辑:程序博客网 时间:2024/05/29 14:18

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

1.      进程

是一个正在执行中的程序。每一个进程执行都有一个执行顺序。该顺序是一个执行路径,或者叫一个控制单元。

2.      线程

就是进程中的一个独立控制单元。线程在控制中进程的执行。一个进程中至少有一个线程

3.      主线程

Java VM 启动的时候会有一个进程java.exe运行。该进程中至少有一个线程负责java程序的运行。

而且这个线程运行的代码存在于main方法中。该线程称之为主线程。

4.      如何在自定义的代码中,自定义个线程?

有两种方式:①继承Thread类 ②实现Runnable接口

4.1创建线程的第一种方式:继承Thread类

在api中,java已经提供了对线程这类事物的描述,就是Thread类

步骤:

①      定义类继承Thread

②复写Thread类中的run方法

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

②      调用线程的start方法

       该方法两个作用:①启动线程②调用run

4.2多线程的异步性

当两个以上线程同时进行时,发现运行结果每一次都不同。因为多个线程都会去获得cpu的执行权。cpu执行到谁,谁就运行。

明确一点,在某一个时刻,只能有一个程序在运行(多核除外),cpu在各个线程间做快速的切换,已达到看上去是同时运行的效果。我们可以形象的把线程的运行行为认为在互相抢夺cpu的执行权,这就是多线程的一个特性:随机性(操作系统中称为异步性)

4.3为什么要覆盖run方法呢?

Thread类用于描述线程

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

也就是说Thread类中的run方法,用于存储线程要运行的代码。

4.4 线程的运行状态

线程有6种状态:

新建NEW

运行(可运行)RUNNABLE

阻塞BLOCKED

等待WAITING

计时等待TIME_WAITING

终止TERMINATED

start()、sleep(time)、wait()、notify()、stop()

4.5获取线程对象以及名称

创建的线程都有自己默认的名称:Thread-编号 (编号从0开始)

static ThreadcurrentThread(): 获取当前线程对象(因为是静态方法可以直接使用类名调用)

getName(): 获取线程名称

设置线程名称:通过setName()函数或者通过构造函数

 

4.6  创建线程的第二种方式:实现Runnable接口

步骤:

①      定义类实现Runnable接口

②      覆盖Runnable接口中的run方法

将线程要运行的代码存放在该run方法中

③      通过Thread类建立线程对象

④      将Runnable接口的子类对象作为实际参数传递给Thread类的构造函数

为什么要将Runnable接口的子类对象传递给Thread的构造函数?

因为,自定义的run方法所属的对象是Runnable接口的子类对象。所以要让线程去指定对象的run方法,就必须明确该run方法所属对象

⑤      调用Thread类的start方法开启线程并调用Runnable接口子类的run方法

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

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

两种方式的区别:

继承Thread:线程代码存放Thread子类run方法中

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

0 0
原创粉丝点击