Java线程问题

来源:互联网 发布:linux ping脚本 编辑:程序博客网 时间:2024/06/17 10:12

线程基础知识:

1.线程的定义:线程是进程中的一个实体,作为系统调度和分配的基本单位.在linux系统下,线程又被称之为轻量级进程

2.线程的性质:①线程是进程内的一个相对独立的可执行单元.

   ②由于线程是被调度的基本单元,而进程不是调度单元.所以,每个进程在创建时,至少需要同时为为该线程创建一个线程.即线程中至少要有一个或一个以上的线       程,否则该进程无法被调度执行

   ③同一个进程内多个线程可以共享资源,但是线程本身并没有资源,他使用的是进程的资源,也就是说进程才是被及分配并拥有资源的基本单位

   ④线程是操作系统中基本调度单元,因此线程中包含系统调度的必要信息,并且线程随着生命周期的不同,状态也不相同

   ⑤由于线程之间资源共享,所以线程之间需要通信和同步机制

3.线程的状态:一个线程在自己完整的生命周期内,可能会存在以下五种状态:①新建状态 ②就绪状态 ③运行状态 ④阻塞状态 ⑤死亡状态

   ①新建状态:当用new来创建一个线程,例如:new Thread(Runnable s);此时并未调用线程的start()方法,线程并没有开始运行,只是处于新建状态

   ②就绪状态:线程调用了start()方法,但是cpu的调度程序并没有把它作为运行程序,也就是说此时线程还在等待cpu资源,并没有执行run()方法,这时处于就   绪状态

   ③运行状态:线程获得了cpu时间,开始执行run()方法的时候,就处于运行状态

   ④阻塞/等待/睡眠状态:线程有资格进入运行状态,但是因为某些条件导致无法运行,此时只要外界达成了这些条件,该线程就能继续运行

     导致陷入此种状态的情况:1.线程通过sleep(int count)方法进入了睡眠,这时一般只要sleep的时间一过线程就能活过来

     2.线程在试图获取对应的锁,但是此时锁已经被他人获取,会进入等待状态

     3.线程在调用一个在I/O上被阻塞的操作,即该操作在输入输出完成之前是不会返回到它的使用者的

     …………

   ⑤死亡状态:在线程的run(0方法执行完成之后,这个线程会立即死去,进入死亡状态.如果这个时候还想调用start()方法,会抛出       java.lang.IllegalThreadStateException异常





原创粉丝点击