首页 > 技术文章 > 多线程编程

dragonflyyi 2013-07-26 21:21 原文

1.   Thread.sleep()    ,  sleep() 是Thread的静态方法,用于暂停当前线程活动

2.   启动线程  t.start()    , t 为Thread类的实例对象
3.   取得当前进程Thread.currentThread().
4.   线程的状态New,  Runnable,  Blocked,  Waiting, Timed waiting, Terminated.
5.   守护线程是为其他线程服务
6.   Lock 对象,条件对象   (与Synchronized关键字等同)
      6-1.   锁用来保护代码片段,任何时刻只能有一个线程执行被保护的代码。
      6-2.   锁可以管理试图进入被保护代码的片段。
      6-3.   锁可以拥有一个或多个相关的条件对象。
      6-4.   每个条件对象管理那些已经进入被保护的代码段但还不能运行的线程。
7.  Synchronized 是对象锁,条件锁的等价,静态方法也可以申明为synchronized.
8.  java中实现多线程,有两种手段,一种是继续Thread类,另外一种是实现Runable接口
9. ThreadRunnable的区别,如果一个类继承Thread,则不适合资源共享。
   但是如果实现了Runable接口的话,则很容易的实现资源共享。
10. 实现Runnable接口比继承Thread类所具有的优势:

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

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

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

主线程也有可能在子线程结束之前结束。并且子线程不受影响,不会因为主线程的结束而结束。

main方法其实也是一个线程。在java中所以的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源

 

java中,每次程序运行至少启动2个线程。一个是main线程,一个是垃圾收集线程。

因为每当使用java命令执行一个类的时候,实际上都会启动一个JVM,每一个jVM实习在就是在操作系统中启动了一个进程。

11. 线程优先级与线程执行先后没有根本区别(关键看谁先获得CPU资源。)

12. 在线程操作中,也可以使用yield()方法,将一个线程的操作暂时交给其他线程执行

13. sleep() 与 wait() 的区别:

 13.1  来自不同类:  sleep()来自Thread类的静态方法(谁调用sleep,谁睡觉), wait()来自Object类。

 13.2  资源释放不同:sleep()没有释放资源,而wait()释放了资源,进入线程池等待。

 13.3  使用范围不同:sleep可以再任何地方使用,而wait(),notify(), notifyAll()必须在同步块中使用.

 13.4  sleep()必须捕获异常,而wait不用. 

14. 用户线程与守护线程的区别?

  

                                                                                                                                         

推荐阅读