多线程相关总结篇_01

一:概念

进程:  程序(任务)的动态执行过程,持有资源(内存)和线程。

线程:  同一进程中有多个线程(最少一个) ,它是 系统中最小的执行单元,可共享进程中的资源

多线程同步完成多项任务,通过提高资源使用效率(发挥多核CPU的优势 )来提高系统的效率,防止运行阻塞。

二:探讨知识点

a.定义线程的两个方法:

1.继承java.lang.Thread

2.实现java.lang.runnable,并实现了接口的run()方法

b.Thread类中的常用方法:

1. start():void  :  线程的唯一启动方法;

2. run():void   : 线程启动后直接进入的方法,相当于普通类的main()方法,servlet中的service()方法。

3. Thread.sleep(long millis):void :sleep方法可以让线程睡眠,交出CPU让它执行其他任务。但是sleep方法不会释放monitor,如果当前线程持有某个对象,即使它进入sleep状态,其他线程依旧无法访问该对象。使用sleep方法需要捕获异常。

4. Thread.yield():void :使当前线程交出CPU,让CPU去执行同样优先级的其他线程(如果不存在则不会成功执行)。与sleep类似的,它同样不会释放monitor。只是yield不会控制交出CPU的时间。调用yield方法不是让线程进入阻塞状态,而是让它重回就绪状态,它只需要重新获得CPU执行时间。

5. join();join(long millis);join(long millis,int nanoseconds) :如果无参,代表在调用该方法的线程结束以后才会执行后面的代码。如果有参,表示当前线程开始后一定时间才开始执行后面的代码。调用join方法本质上是调用了Object的wait方法。join方法会让线程释放monitor。

6. interrupt():void:通过interrupt方法可以中断处于阻塞状态的线程。

7. isInterrupt():boolean : 判断一个线程是否被中断,interrupt和isInterrupted结合使用可以中断处于非阻塞状态的线程。

8. setPriority(int priority):void  : 设置优先权限。

9. Thread.holdsLock(Object x):boolean  :  若当前线程在指定的对象上保持监视器锁时,返回true

10. currentThread():Thread  : 返回当前正在执行的线程的引用。

11. getName():String : 获取当前执行线程的名字。

 

c.实现Runnable接口比继承Thread类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

三:问题引入

1.sleep方法和wait方法有什么区别 
这个问题常问,sleep方法和wait方法都可以用来放弃CPU一定的时间,不同点在于如果线程持有某个对象的监视器,sleep方法不会放弃这个对象的监视器,wait方法会放弃这个对象的监视器

2.什么是线程安全 ?
     如果你的代码在多线程下执行和在单线程下执行永远都能获得一样的结果,那么你的代码就是线程安全的。s

3.Thread 和 runable的区别是什么?

  如果一个类继承Thread,则不适合资源共享。但是如果实现了Runable接口的话,则很容易的实现资源共享。

 

http://www.mamicode.com/info-detail-517008.html

http://lavasoft.blog.51cto.com/62575/27069/

posted @ 2017-08-13 22:35  大灰狗  阅读(112)  评论(0)    收藏  举报