9-3学习总结

来源:互联网 发布:linux samba 配置 编辑:程序博客网 时间:2024/05/16 11:18

多线程

一、程序与进程

      1.程序:一段静态的代码。

      2.进程:程序的一次动态执行过程,它对应从代码加载、执行到执行完毕的一个完整过程。

      3.进程也称任务,支持多个进程同时执行的OS就被称为多进程OS或多任务OS。

二、进程与线程

1.在一个程序内部也可以实现多个任务并发执行,其中每个任务称为线程
2.线程是比进程更小的执行单位,它是在一个进程中独立的控制流,即程序内部的控制流。
特点:线程不能独立运行,必须依赖于进程,在进程中运行。
每个程序至少有一个线程称为主线程
单线程:只有一条线程的进程称为单线程
多线程:有不止一个线程的进程称为多线程
三、开启多线程的优点和缺点
 
1.提高界面程序响应速度。通过使用线程,可以将需要大量时间完成的流程在后台启动单独的线程完成,提高前台界面的相应速度。
2.充分利用系统资源,提高效率。通过在一个程序内部同时执行多个流程,可以充分利用CPU等系统资源,从而最大限度的发挥硬件的性能。
3.当程序中的线程数量比较多时,系统将花费大量的时间进行线程的切换,这反而会降低程序的执行效率。但是,相对于优势来说,劣势还是很有限的,所以现在的项目开发中,多线程编程技术得到了广泛的应用。


在实现线程编程时,首先需要让一个类具备多线程的能力,继承Thread类或实现Runnable接口的类具备多线程的能力,然后创建线程对象,调用对应的启动线程方法即可实现线程编程。
    在一个程序中可以实现多个线程,多线程编程指在同一个程序中启动了两个或两个以上的线程。
    在实际实现线程时,Java语言提供了三种实现方式:
继承Thread类
实现Runnable接口
使用Timer和TimerTask组合

1.线程的状态

       具有四种状态:

新生态:已分配内在,未高度

可执行态:start( )

阻塞态

停止态:stop( )

 

新建:

当一个Thread类或其子类的对象被创建后,进入这个状态。

这时,线程对象已被分配内存空间,其私有数据已被初始化,但该线程还未被调度,可用start()方法调度,或用stop()方法中止。

新生线程一旦被调度,就将切换到可执行状态。

2.可运行:

       处于可执行环境中,随时可以被调度而执行。它可细分为两个子状态:

运行状态,已获得CPU,正在执行;

就绪状态,只等待处理器资源。

       这两个子状态的过渡由执行调度器来控制。

3.阻塞:

       由某种原因引起线程暂停执行的状态。

4.死亡:

线程执行完毕或另一线程调用stop()方法使其停止时,进入这种停止状态。

它表示线程已退出可运行状态,并且不再进入可运行状态。


线程优先级

Java把优先级划分为10级,用1至10的整数表示,数值越大,优先级越高。

在Thread类中定义了三个优先级常量:MIN_PRIORITY,MAX_PRIORITY和NORM_PRIORITY,其值分别为1, 10, 5。

在为线程分配优先级时,其值应该在1至10之间,否则将出错。

如果应用程序没有为线程分配优先级,则Java系统为其赋值为NORM_PRIORITY。

线程调度原则

调度就是分配CPU资源,确定线程的执行顺序。

Java采用抢占式调度方式,即高优先级线程具有剥夺低优先级线程执行的权力。

如果一个低优先线程正在执行,这时出现一个高优先级线程,那么低优先级线程就只能停止执行,放弃CPU,推回到等待队列中,等待下一轮执行,而让高优先级线程立即执行。

如果线程具有相同的优先级,则按"先来先服务"的原则调度。