线程基本概念(一)

 线程计划 --概念详解篇一--


1.什么是线程


概念:在一个程序中同时运行的多个独立的流程,每一个独立的流程就是一个线程。

进程:程序启动后,进程就开始运行 ,一个进程对应一个程序,但是一个进程里包含了多个(至少一个)线程(独立的流程)。

单线程程序:一个程序进程中只包含一个线程。

多线程程序:一个程序进程中包含多个线程。

线程入口:线程人口就是main方法,我们现在所写的都是单一线程。

2.线程的分类:

主线程:  一个进程启动后,它只有一个线程,这个线程就是主线程  

子线程:  主线程中,可以创建更多的线程,而这些更多的线程就是子线程。用户自己创建的线程。

3.线程开发的方式:  


    1) 自定义一个类,让这个类去继承一个线程类(Thread) ,,实现Thread类的一个方法,叫做run() 即可.
          
       ----->继承线程类
         class A extends Thread {

        //实现Thread类中的run方法
        public void run() {

             //里面就是线程该做的事情。
         }
     }
       ------> 启动线程使用线程的start()方法
     
       ------> 结论:线程结果随机
             
           ------->为什么随机:原因就是:线程是相互争抢资源,谁能抢到cpu,就可以得到优先的运行,其他线程只能等待,

                   当cpu的时间片到期了,大家又开始抢,谁抢到谁运行。



     2) 实现Runnable接口,即可

         ------>实现接口
    
         class B implements Runnable {


         public void run() {

              //里面是线程做的事情
              }
           }
      
       ------> 主方法调用:
        B b=new B();

            或是

         Runnable r=new B();

         有没有运行的方法,start()? no
      
         对于实现runnable接口的线程,若要使用start()方法启动线程,则必须按以下操作进行;

          1)先产生一个线程类对象

          Thread t=new Thread();

          2)把刚才得到的接口对象的名字放入Thread的构造方法中即可  

          Thread t1=new Thread(t);

          3)启动线程  

           t1.start();

       问题1: 若线程不掉用start()启动,而直接调用run方法? 这个结果是否一样?
      
       注意点: 不要直接去调用run方法,这和调用普通方法并没有差别,结果固定.

4.线程的状态    


     1)初始状态 : 调用start(),让线程成为可运行  

     2)可运行状态 :(要让cpu来选择到底谁能运行 )  

     3)运行状态  :调用 run()方法来让线程运行  ,从运行到可运行是cpu时间片已经到期。

     4)终止状态  : 线程死亡  


 最后组成一张图:


   初始-----(调用start()方法)--->可运行---(执行run())-->运行-->(程序执行完毕)-->终止
                                                                                <------------cpu时间片到期                                                                  
 
5.线程状态中 有一个很重要的状态: 休眠状态(阻塞状态)   

  休眠状态的经典方法:  

        1) join:  加入:  若有线程调用了此join方法,则会让此线程先执行完毕。  

        2) sleep:  可以让低优先级的 线程得到执行的机会。 它这个方法中加入的时间是无法精准控制的。                                    

6. join方法举例

   有2个线程,一个叫Thread1,一个叫Thread2

   现在要求在Thead1中要加入Thread2,让Thread2先运行,然后Thread1再运行。





posted @ 2017-06-08 10:34  牛在地上跑  阅读(92)  评论(0)    收藏  举报