线程
线程,进程可进一步细化为线程,是一个程序内部的一条执行路径
线程作为调度和执行的单位,每个线程拥有独立的运行栈和程序计数器,线程切换的开销小
线程的创建与启动
Java语言中的JVM允许程序运行多个线程,它通过java.lang.Thread
类来实现
Thread类的特性
- 每个线程都是通过某个特定Thread对象的run()方法来完成操作的,经常把run()方法的主体称为线程体
- 通过该Thread对象的start()方法来启动这个线程,而非直接调用run()
创建的方法:
-
方法一
- 继承Thread类的子类
- 重写Thread的run()方法 --------------> 将此线程执行的操作声明在run()方法中
- 创建Thread子类的子类的对象
- 调用此对象的
start()
- 启动当前线程
- 调用当前线程的run()
-
方法二:
-
创建一个线程是声明实现类
Runnable
接口 -
重写实现
run
方法 -
创建该类的对象
-
在创建
Thread
时作为参数传递,并启动- 启动线程
- 调用当前线程的run() -------> 调用了Runnable类型的target的run()
-
Demo demo = new Demo(); new Thread(demo).start();
-
两种方法比较
优先选择:实现Runnable接口的方式
原因:
- 继承的方法具有单继承的局限性
- 实现的方式更适合来处理多个线程有共享数据的情况
常用方法
start():启动当前线程,调用当前线程的run()方法
run():通常需要重写Thread类中的此方法,将创建的线程要执行的操作声明在此方法中
currentThread():静态方法,返回当前代码执行的线程
getName():获取当前线程的名字
setName():设置当前线程的名字
yield():释放当前cpu的执行权
join():在线程a中调用线程b的join(),此时线程a就进入阻塞状态,直到线程b完全执行完以后,线程a才结束阻塞状态
sleep(millitime):让当前线程"睡眠"指定的毫秒,在指定的millitime毫秒时间内,当前线程是阻塞状态
isAlive():判断线程是否存活
线程的优先级
MAX_PRIORITY : 10级
MIN_PRIORITY : 1级
方法
getPriority() : 返回线程优先级
setPriority(int newPriority) : 改变线程优先级
注
高优先级的线程要抢占低优先级cpu的执行权,但只是从概率上讲,并不意味着高优先级的执行完后低优先级才执行
标签:调用,run,Thread,----,线程,当前,Java,方法 From: https://www.cnblogs.com/LruiBlog/p/17009132.html