您的位置:首页 > 其它

实现Runable接口比继承Thread类所具有的优势

2017-04-06 22:20 387 查看
科普一下:

进程:每一个进程都会有独立的代码以及数据存储空间,进程间的切换开销比较大,一个进程包含1-n个线程。

线程:同一类线程共享一段代码,以及数据的存储空间,线程间的切换开销小。

线程的5个阶段:创建、就绪、运行、阻塞、终止

1、适合多个相同的程序代码的线程去处理同一个资源
2、可以避免Java中的单继承的限制
3、增加程序的健壮性,代码可以被多个线程共享,代码和数据独立


多线程的运行实际上就是通过Thread类的start方法来执行的。

线程的优先级:

优先级分别为1-10,最高为10,最低为1,默认分配的为5。

Thread.setPriority()和Thread.getPriority()分别用于设置线程优先级和获得线程的优先级。

线程的睡眠:

Thread.sleep(time),使线程处于阻塞状态,休眠结束后,线程又会重新处于就绪状态。

线程的等待:

wait()导致线程的等待,直到其他线程调用,该对象的notify()或者是notifyAll()

join()

等待该线程终止,这个方法往往在主线程等待子线程处理之后,再执行。

为什么使用join()?

往往主线程生产并启动子线程,子线程处理一大段耗时的运算,主线程会先于子线程结束,但是很多的情况下,主线程的运行确实需要子线程运行之后的结果,这种情况下,就必须主线程在运行完了后,再结束,这时就用到了join()方法。

sleep()、yield()线程方法的区别:

线程对象执行sleep()的时候,线程在规定的时间内肯定是由运行状态转到阻塞状态的;而yield()方法,线程会由执行状态变成一个可执行的状态,绝对不是阻塞、等待的状态,会把一部分CPU资源让给同等优先级的可运行状态线程。

程序中,如果一个高优先级的线程没有sleep方法,那么低优先级的线程只能等到高优先级的线程运行结束以后,才可以得到运行的机会。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: