线程基础方法

56 阅读3分钟

线程基础方法

实现线程的4种方式

1.继承thread类,是runnable接口的实现。
2.实现runnable接口,重写run()方法,比继承thread类好用,实现接口还可以继承类,避免单继承带来的局限性。
3.使用excutor框架创建线程池,是juc提供的线程池的实现。
4.实现callabie接口,重写call方法,有返回值。
一般情况下使用第二种,避免继承的局限性,一个类可以继承多个接口,适合于资源的共享
继承thread类的线程类,可以直接调用strat方法启动线程,使用static可以实现资源共享,一个线程只能执行一次start方法,而且不能通过实现类对象的run方法去启动一个类,run是一个普通方法,

thread的常用方法

1.start:启动线程并执行相应的run方法
2.run:子线程要执行的代码放入run方法里面
3.currentthread:静态的,调取当前线程的
4.getname:获取当前线程的名字
5.setname:设置当前线程的名字
6.yield:调用此方法的线程将释放当前cpu的执行权,(很可能自己再次抢到资源)
7.join:在a线程调用b线程的join方法,表示当执行到此方法,a线程停止运行,直到b线程运行完成,
8.isalive:判断线程是否还存活
9.sleep:显性的让当前线程睡眠n毫秒,只能捕获异常,因为run方法没有抛出异常,
10.wait:当一个线程调用object.wait,那么这个线程就会进入object对象的等待队列,在这个队列中可能会有多个线程,因为系统运行多个线程同时等待某一个对象,调用wait会释放锁,sleep不会
11.notify:当一个线程调用object.notity,就会从这个等待队列随机唤醒一个线程,
12.notifyall:唤醒当前等待队列的所有线程
设置线程的优先级,非绝对,只是相对几率会大些,
getpriority:返回线程的优先级
setpriority:改变线程的优先级
通过调用start方法来启动一个线程,这个时候该线程是就绪可运行状态,并没有运行,要等该线程拿到cpu时间片,就会开始执行run方法,

线程执行流程

创建线程--》start--》可运行、就绪状态--》拿到cpu时间片--》运行状态--》stop或者run结束--》销毁状态

创建线程--》start--》可运行、就绪状态--》拿到cpu时间片--》运行状态--》sleep、join--》其他阻塞--》sleep、join完成--》就绪

创建线程--》start--》可运行、就绪状态--》拿到cpu时间片--》运行状态--》wait--》等待阻塞状态---》notify、notifyall--》锁定阻塞状态--》同步锁释放--》就绪

创建线程--》start--》可运行、就绪状态--》拿到cpu时间片--》运行状态--》synchronize--》锁定阻塞--》同步释放锁--》就绪

创建线程--》start--》可运行、就绪状态--》拿到cpu时间片--》运行状态--》时间片用完、yield方法--》就绪

在这里插入图片描述