黑马程序员技术交流社区
标题:
多线程知识梳理
[打印本页]
作者:
王子鹏
时间:
2016-5-28 11:00
标题:
多线程知识梳理
多线程
cpu 的执行资格:可以被cpu处理 ,在处理队列中排队。
cpu的执行权:正在被cpu处理。
进程: 正在进行中的程序(直译)
线程: 进程中一个负责程序执行的控制单元(执行路径)
一个进程中可以有多个执行路径,称之为多线程;
一个进程中至少有一个线程
开启多个线程是为了同时运行多部分代码;(其实是切换的快)
每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务;
多线程的好处与弊端:
好处:解决了大部分同时运行的问题
多线程的弊端:线程太多会导致效率的降低。
其实应用程序的执行都是cpu在快速切换完成的,这个切换是随机的
创建线程的目的是为了开启一条执行路径,去运行指定的代码和其他代码实现同时运行;
创建线程的第一种方式:
步骤:
1 定义一个类继承Thread类
2 覆盖thread类中的 run方法
3 直接创建thread的子类(步骤1.中定义的类)对象创建线程
4 调用start方法开启线程并调用线程的任务run方法执行
d1.start() :开启线程 同时调用了d1对象里的run方法
线程的编号:默认的是 main Thread0 Thread1 Thread2 当在构造函数里覆写thread的构造函数 super(name) 即手动修改
getName 返回当前对象的名称
Thread currentThread() 调用当前执行的线程对象的引用
Thread currentThread().getName() 调用当前执行线程对象的名字
线程的状态:
d1.start() :开启线程 同时调用了d1对象里的run方法
stop(): 强制结束线程
sleep(time):冻结线程 存在而不运行 必须有个时间 时间一到 线程就会恢复运行;
wait(): 冻结线程 无条件
notify(): 恢复线程
Runnable接口里还有一个run方法 用来封装实现线程任务
临时阻塞状态 具备着执行资格 但是不具备执行权 正在等候执行权
创建线程的第二种方式:实现runnable接口 (用于不能继承thread 已经有自己的父类)
1 定义类实现Runnable接口
2 覆盖接口中的run方法 将线程的任务代码封装到run方法中
3 通过Thread类创建线程对象 并将runnnable接口的子类对象作为构造函数的参数进行传递。public Thread (Runnable target)
为什么? 因为线程的任务都封装在runnable接口子类对象的run方法中 队友要在线程对象创建时就必须明确要运行的任务
4 调用线程对象的start方法开启线程
【两种方法都要用到Thread创建线程对象】
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2