线程Thread的常用方法

线程的创建:

一个类实现runnable或者继承java.lang.thread类,override其run方法.(方法体里边编辑具体的执行代码)


线程启动:

start();


线程的sleep(),wait(),notify(),notifyAll()的区别:

sleep:属于thread类,该方法是表示线程暂时进入线程等待状态,不会释放cpu资源给其他线程,经过参数毫秒后自动运行该方法的调用线程(如sleep(5000)就会等待5秒后再运行该线程,在此期间,别的线程也无法抢占cpu资源)


wait():属于object类,跟sleep()一样,不带参数,会释放cpu资源,给其他线程运行,要重新运行该线程则需要唤醒线程,需要调用notify()方法;

notify():线程的唤醒方法,调用该方法线程会由线程阻塞状态转变为线程就绪状态(这也就意味着线程需要重新抢夺cpu,而不是马上运行);

notifyAll():方法没有调用者线程对象,唤醒所有线程;


yield():俗称礼让线程,停止线程运行,将cpu资源释放出去,重新抢夺(调用该方法之后重新抢夺有可能还是该线程运行);

join():线程加入方法,调用方法之后,线程立马获得cpu资源并运行,其他线程等待该线程完成再抢夺cpu;(不同于notify)

interrupt():线程中断方法,线程因为调用sleep(),wait(),或其他线程的join()方法进入到阻塞状态的时候,中断状态interrupt status会被清除(下面两种方法的返回值不正确),并有一个InterruptException,编辑代码时try,catch;方法不能正确停止线程

正确的线程终止方法是在run()中进行isinterrupt()的值的判断;



interrupted():static方法,返回boolean,测试线程是否中断

isinterrupted():实例方法,返回boolean,测试线程是否中断

Sleep与interrupt

interrupt是个很暴力的方法,打断一个线程的Sleep时并不需要获得该线程的lock。虽然暴力却也有暴力的用处。在一个线程无时限sleep的时候也只有interrupt能够唤醒他。在interrupt的时候会抛出InterruptedException,这个Exception是由Thread 类自动抛出的。因此Interrupt带有强烈的阻塞味道。

wait与interrupt

interrupt同样可以打断wait的等待,与打断sleep不同的是,被打断的wait的线程在重新获得lock之前是不会抛出InterruptedException。

摘录自http://blog.csdn.net/ningxuezhu/article/details/8043537



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值