第1章 多线程

来源:互联网 发布:中信银行网络贷款利率 编辑:程序博客网 时间:2024/06/16 22:27
                        第1章         多线程
    一、线程概述
         1.程序是对数据描述与操作的代码的集合
         2.进程是程序的一次动态执行过程
            进程特点:
                1)进程是系统运行程序的基本单位
                2)每一个进程都有自己独立的一块内存空间、一组系统资源
                3)每一个进程的内部数据和状态都是完全独立的
         3.线程是进程中执行的最小单位,每个进程中必须至少建立一个线程(这个线程为主线程)
            多线程好处:
                1)充分利用CPU的资源
                2)简化编程模型
                3)带来良好的用户体验
         4.一个单CPU的机器,如何同时执行多个线程?
            由于单CPU的机器中,CPU同时只能执行一条指令,因此在仅有一个CPU的机器上不可能同时执行多个任务,
            而操作系统为了提高系统的运行效率,将CPU的执行时间分成多个时间片,分配给不同线程,
            当一个时间片执行完毕后,该线程就可能让出CPU的使用权限交付给下一个时间片的其他线程
    二、在Java中实现多线程
        Thread类:位于java.lang包下,该类支持多线程编程
            常用方法:
                Thread()                                分配新的Thread对象
                Thread(Runnable target)                    分配新的Thread对象,target为run()方法被调用的对象
                Thread(Runnable target,String name)        分配新的Thread对象,target为run()方法被调用的对象,name为新线程的名称
                void run()                                执行任务操作的方法
                void start()                            使该线程开始执行,Java虚拟机调用该线程的run()方法
                void sleep(long millis)                    在指定的毫秒数内让当前正在执行的线程休眠(暂停执行)
                String getName()                        返回线程的名称
                int getPriority()                        返回线程的优先级
                void setPriority(int newPriority)        更改线程的优先级
                static Thread currentThread()            返回当前正在执行的线程对象的引用
                boolean isAlive()                        测试线程是否处于活动状态
                void join()                                等待该线程终止
                void interrupt()                        中断线程
                void yield()                            暂停当前正在执行的线程对象,并执行其他线程
        1.继承Thread类
            语法:    public class className extends Thread{}
        2.实现Runnable接口
            语法:    public class className implements Runnable{}    
        3.注意:
            1)已启动的线程对象不能再次调用start()方法
            2)调用start()方法是启动线程,属于多线程;调用run()方法是调用实例方法,这样程序按顺序执行,属于单线程
            3)实现多个线程之间资源共享需要使用Runnable接口,单继承使用继承Thread方法,编写简单,可以直接操作线程
    三、线程的状态
        1.创建状态
        2.就绪状态
        3.运行状态
        4.阻塞状态
        5.死亡状态
        线程之间的转移与方向之间的关系
        创建---start()---就绪---run()---运行---死亡
        创建---start()---就绪---run()---导致阻塞的事件---阻塞---阻塞解除---就绪---
    四、线程的调度
        1.概念:线程调度是指按照特定机制为多个线程分配CPU的使用权
        2.线程调度方法
            1)设置线程优先级
                优先级的高低反映线程的重要或紧急程度
                当线程排队等待CPU资源时,会根据线程优先级的大小,分配给较大优先级的线程的概率大,但并不是绝对
                优先级用1~10表示,1表示最低,10表示最高
                通过getPriority()方法获得线程的优先级,通过setPriority(int newPriority)方法设置线程的优先级
            2)线程的休眠
                在程序中允许线程进行暂时休眠,调用sleep()方法
                public static void sleep(long millis)
                sleep()方法会让线程进入不可运行状态,运行结束后进入可运行状态
                调用sleep()方法需处理InterruptedException异常
            3)线程的强制执行
                jion()方法使当前线程暂停执行,等待调用该方法的线程执行结束后再继续执行本线程
                方法语法:
                    public final void join()
                    public final void join(long millis)
                    public final void join(long millis,int nanos)
            4)线程的礼让
                语法:public static void yield()
                yield()方法可暂停当前线程执行,使该线程转为就绪状态,不转为阻塞状态
                调用yield()方法后,系统会选择其他相同获得更高优先级线程执行,若无则继续执行该线程
                线程的礼让只是提供一种可能,并不一定,因为线程只是转换成就绪状态
    五、线程的同步
        需求:多线程并发执行操作同一共享资源时,将带来数据不安全问题
        概念:当两个或多个线程需要访问同一资源时,需要以某种顺序来确保该资源某一时刻只能被一个线程使用
        采用线程同步来控制线程的执行方式
            同步方法
                语法:
                    访问修饰符 synchronized 返回类型 方法名(参数列表) {//省略方法体.....}
                    synchronized 访问修饰符 返回类型 方法名(参数列表) {//省略方法体.....}
                缺陷:
                    影响效率
            同步代码块
                语法:
                    synchronized(syncObject){//需要同步的代码}
                优点:
                    灵活性高
        线程类型的安全
            特点:
                安全的数据类型,采用线程同步,速度慢,安全高            例子:Vetor,Hashtable,StringBuffer
                不安全的数据类型,不采用线程同步,速度快,安全低        例子:ArrayList,HashMap,StirngBuilder
    
    
    
    
    
    
    
    
                    
原创粉丝点击