多线程

一,基本概念

 

进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1 - N的个线程(进程是资源分配的最小单位)

  线程:同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换开销小(线程是CPU调度的最小单位)。

 

二,实现多线程的两种方式

 

1,继承线程类

2,实现可运行

 

三,线程和Runnable接口的区别

 

如果一个类继承主题,则不适合资源共享。但是如果实现了可运行的接口的话,则很容易的实现资源共享。

 

总结:

实现了Runnable接口比继承线程类所具有的优势:

1):适合多个相同的程序代码的线程去处理同一个资源

2):可以避免的java中的单继承的限制

3):增加程序的健壮性,代码可以被多个线程共享,代码和数据独立

4):线程池只能放入实现可运行或调用类线程,不能直接放入继承线程的类

 

注:主要方法其实也是一个线程在的Java中所有的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁先得到CPU的资源。

在java的中,每次程序运行至少启动2个线程。一个是主线程,一个是垃圾收集线程。因为每当使用java的命令执行一个类的时候,实际上都会启动一个JVM,每一个JVM实习在就是在操作系统中启动了一个进程。

 

四,线程状态转换

 

1,新建状态(新):新创建了一个线程对象。

2,就绪状态(可运行):线程对象创建后,其他线程调用了该对象的开始()方法该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。

3,运行状态(运行):就绪状态的线程获取了CPU,执行程序代码。

4,阻塞状态(封锁):阻塞状态是线程因为某种原因放弃CPU使用权,暂时停止运行直到线程进入就绪状态,才有机会转到运行状态阻塞的情况分三种。:

(一),等待阻塞:运行的线程执行等待()方法,JVM会把该线程放入等待池中(等待会释放持有的锁)。

(二),同步阻塞:运行的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则JVM会把该线程放入锁池中。

(三),其他阻塞:运行的线程执行睡眠()或加入()方法,或者发出了I / O请求时,JVM会把该线程置为阻塞状态当睡眠()状态超时,join()方法等待。线程终止或者超时,或者I / O处理完毕时,线程重新转入就绪状态。(注意,睡眠是不会释放持有的锁)

5,死亡状态(DEAD):线程执行完了或者因异常退出了run()的方法,该线程结束生命周期。

 

五,线程调度

1,线程优先级:优先级高的线程会获得较多的运行机会,用证书表示,取值范围为1〜10

 

你可能感兴趣的:(java的,d多线程)