你的位置:首页 > Java教程

[Java教程]Java基础知识总结之多线程


1.引入线程与进程的目的

  在OS中引入进程的目的是为了使更多的程序能够并发执行,以提高资源的利用率和系统的量。

 

  引入线程的则是为了减少程序在并发执行时所付出的时间开销,是OS具有更好的并发性。

 

2.进程与线程的区别

  进程是程序的一次动态执行过程,它需要经历从代码加载代码执行到执行完毕的一个完整的过程,多线程操作系统的能够同时运行多个进程(也就是运行中的程序),由于CPU的具备分时机制,所以每个进程都能够循环的获得自己的CUP时间片。由于CPU执行速度非常快,使得所有的程序好象是在“同时”运行一样(专业术语叫做“并发”)。

  线程是进程的一个实体,是CPU 调度与分配的基本单位,它是比线程更小的的能够独立运行的基本单位。线程基本自己不拥有系统资源,只拥有一点在运行中必不可少的资源,但是它可与同属一个进程中的其他线程共享进程所拥有的全部资源。

 

3.任何线程一般具有5种状态:创建、就绪、运行、阻塞、终止

  创建状态:新建一个线程对象可采用Thread类的构造方法来实现。

    就绪状态:调用start()方法启动线程,此时线程进入线程队列排队,等待CPU的服务。

    运行状态:调运线程对象的run()方法。

    阻塞状态:在可执行状态下,如果调用sleep()、suspend()、wait()等方法,线程进入阻塞状态

        只有当引起阻塞状态的原因消失时,线程才可以进入阻塞状态。

   死亡状态:调用stop()方法或run()方法执行结束时。

 

4.死锁的概念

 

5.进程同步

  所谓进程同步就是指多个操作系统在同一时间段内只能有一个线程在运行,其他线程要等待此线程完成以后才能继续继续执行。

  解决同步问题的两种方式:

    同步代码块

synchronized(同步对象){ 需要同步的代码;  }

   同步方法

synchronized(['sɪŋkrənaɪzd])关键字将一个方法声明为同步方法。

 

 

6.线程池

  线程池在系统启动时即创建大量空闲的线程,程序将一个Runable对象传给线程池,线程池就会启动一个线程来执行run()方法,当run()方法结束后,该线程并不会死亡,而是再次回到线程池中成为空闲状态,等待下一个Runable对象的run()方法。

  系统启动一个新的线程的成本比较高,因为它涉及与操作系统交互。在这种情况下,使用线程池可以很好的提高性能。尤其是当程序中需要创建大量的生存期很短暂的线程时,更应该考虑使用线程池。

   线程池还可以有效的控制系统中并发进程的数量,避免系统中包含大量并发线程导致JVM崩溃。