java——简单理解线程

来源:互联网 发布:淘宝付了定金可以退吗 编辑:程序博客网 时间:2024/05/17 08:25

·【概念】

      一般来说,我们把正在计算机中执行的程序叫做“进程”(process),而不将其称为“程序”(program)。

所谓“线程”(thread),是“进程”中某个单一顺序的控制流。新兴的操作系统,如WindowsNTWindows95,大多采用多线程的概念,把线程视为基本执行单位。

     用最普通的话定义线程,即:一个程序(进程)里边不同的执行路径,即线程


二·【问题】

       ·引入线程,给我们带来了什么好处?


三 ·【实例分析】

   (1)引入线程,给我们带来了什么好处?我们对比于没有引用线程,会怎么样?

  (a)引用线程代码:

/*引用线程*///主方法main()public class TestThread {   public static void main(String args[])   {   Runner r = new Runner();   //下边两行代码是体现多线程同步执行的一个过程。必须声明thread。   Thread t = new Thread(r);       t.start();//通过调用thread对象的start方式启动线程执行   for(int i=0;i<100;i++)   {   System.out.println("Main Thread:"+i);   }   }}//通过实现runnable接口实现多线程class Runner implements Runnable {  public void run()  {  for(int i=0;i<100;i++)  {  System.out.println("Runner"+i);  }        }}

  (b) 不引用线程代码:

/*不引用线程*///主方法main()public class TestThread {   public static void main(String args[])   {   Runner r = new Runner(); //差别在这句话   r.run();//直接调用runner对象的run方法,不引用thread线程   for(int i=0;i<100;i++)   {   System.out.println("Main Thread:"+i);   }   }}//通过实现runnable接口实现多线程class Runner implements Runnable {  public void run()  {  for(int i=0;i<100;i++)  {  System.out.println("Runner"+i);  }        }}

对比执行结果:

   <没有引入线程>                                                      <引用线程>   

         
  

   结果分析:

    在没有引用线程时,它是顺着main函数执行。什么意思呢?就是说在main函数中,先把r.run()方法执行完毕后,在执行main函数剩下的部分;用一张图来描述此过程:


    而在引入线程时,它是这样执行的:r.run()和main函数中的输出两个是同步执行:什么意思呢?就是说r.run()方法的执行不影响main函数的顺序执行。用一张图来描述此过程:



   最后再用几句话总结该过程:

      1·程序启动时会有一个由主方法(public static void main(){})所定义的线程。

      2·通过实现Runnable接口的实例来实现多线程。

      3·通过创建Thread实例来创建新的线程。

       解释java中有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。一个类只要继承了Thread类同时腹泻了本类中的run()方法就可以实现多线程操作了,但由于在java中一个类只能继承一个父类,所以,实际中多用实现Runnable接口来实现多线程。

      4·每个线程都是通过某个特定的thread对象对应的方法run()来完成操作。(方法run()成为线程体)

      5·通过调用thread类的start()方法来启动一个线程。


   【4·抛砖引玉】

    以上实例只是简单的解析引入线程同步给我们带来了什么方便之处?通过代码的实现,显然看出,其提高了cpu的处理速度。其实这些问题我们在课本上都明白,但具体在代码中是怎么实现的?我们需要实践一番。包括以下几个问题,如何用代码实现,我们应该怎么做呢?


         1·当两个线程同时对一个资源操作,可能会给我们带来什么问题?

         2·我们该怎么避免第2个问题呢?

         3·如果使用锁的方式不当,会带来什么问题?







 




0 0
原创粉丝点击