java多线程学习笔记

    首先,基本概念部分 
     1、线程:比进程更小的执行单元,利用多线程,可以提高CPU利用率。

     2、线程状态:

            #1:新建状态:此时由操作系统新建了一个线程,但是这个线程并没有正式开始执行

            #2:Runable可运行状态(经虚拟机运行后没问题,即为可运行状态):在虚拟机中执行,但是并没有正式在自己的机器中执行,相当于正式表演之前的彩排。
             #3:Running正在执行状态:一个线程正在执行时的状态。

            #4:Blocked阻塞状态:在一个线程的执行过程中,因为某些原因,这个线程不能顺利执行,暂时被打断。打断后做了两件事,第一件,转入下一个线程的执行

                   ;第二件,等待某个条件或者某个动作将其唤醒

    3、相关动作:

           #1:start():将线程由新建状态变为Runable状态。

           #2:join()、sleep()、wait():当处于running状态的线程由于某些原因不能执行时,调用这三个函数。使其转换到block阻塞状态。

           #3:sleep()结束、join中断、I/O完成等动作使线程由block状态变为Runable状态

           #4、虚拟机调度:为Runable状态的线程赋予CPU,使得其可以正式执行。

           #5、yield():将Running状态的线程变为Runnable状态。

           #6:run结束、异常推出:线程死亡,释放掉它所具有的资源。

           #7:notify/notifyAll::处于block状态的线程的内部切换。

  3、相关数据结构:

          #1、等待池:正在执行的线程被阻塞后,由Running态进入block阻塞态后首先进入这个等待池,等待池中的线程是解了锁的阻塞态,不能直接转到Runable状态。

         #2、阻塞池:等待池中的线程经过notify或者notifyAll函数后,进入加锁状态,成为了加锁态的阻塞态,此时可以转为Runable态。

  4、总结:Runing态可以转为除了新建状态的任意状态。而只有Runable态可以转为Runing态

  5、只有使用了synchronized关键字的线程能实现阻塞(Blocked)状态下的转换

 

 

你可能感兴趣的:(学习心得)