并发、并行、Java多线程状态

1、进程和线程的区别

进程是资源的分配和调度的一个独立单元,而线程是CPU调度的基本单元。一个进程可以包括多个线程,并且线程共享整个进程的资源(寄存器、堆栈、上下文),一个进程至少包括一个线程。

2、并发(concurrency)与并行(parallellism)

(1)并行是指俩个或者多个事件在同一时刻发生;而并发是指俩个或多个事件在同一时间间隔发生。

(2)并行是在不同实体上的多个事件,并发是在同一个实体上的多个事件。

(3)并行可以理解为在一台处理器上“同时”处理多个任务,并发可以理解为在多台处理器上同时处理多个任务。

并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。

3、线程的5种(或者6种)状态

 

 

(1)初始状态(如何实现多线程)

实现Runnable接口或者继承Thread类得到一个线程类,new一个实例出来,线程就进入了初始状态。

 

(2)可运行状态(就绪状态)

  a、调用线程的start()方法,此线程进入可运行状态。

  b、当前线程sleep()方法结束,其他线程join()结束,等待用户输入完毕,这些线程也将进入可运行状态。

  c、调用当前线程的yield()方法,当前线程进入可运行状态。

  d、锁池里的线程拿到对象锁后,进入可运行状态。

(3)运行状态

 线程调度程序从可运行池中随机选择一个线程作为当前线程时当前线程所处的状态,这也是线程进入运行状态的唯一方式

(4)阻塞状态

a、当前线程T调用Thread.sleep()方法,当前线程进入阻塞状态。

b、运行在当前线程里的其他线程t2调用jion()方法,当前线程进入阻塞状态。

c、等待用户输入时,当前线程进入阻塞状态。

(5)死亡状态

当线程的run()方法完成时,或者主线程main()方法完成时,我们就认为他死去。

(6)等待队列(Object里的方法)

调用Object类的wait(),notify(),notifyAll()方法前,必须获得Obect类的锁,也就是说必须写在synchronized(obj)代码段内。

posted @ 2018-03-21 13:51  跟着心走!  阅读(609)  评论(0编辑  收藏  举报