Java进阶(多线程机制的基本操作)

来源:互联网 发布:现代言情推荐 知乎 编辑:程序博客网 时间:2024/06/05 05:31
    系统级程序员必须对多线程机制了解得非常透彻。
    在一个程序中,Main方法叫主线程,由这个主线程分出来的另外一些分支,且这些分支线程能够与主线程并行,这种程序就是多线程机制的程序。
    CPU是真的那么强大,能三心二意吗?NO,由于CPU的运算速度非常快,CPU将运算时间分为一个一个的小时间片,一段时间执行这个线程另一段时间执行另一个线程。进程只是一个静态的概念,而线程是一个进程里面的不同的执行路劲。但是并不是说CPU不能同时执行两个线程,只要CPU是双核,或者双CPU。
    Java的线程是通过java.lang.Thread类来实现的。可以通过new一个Thread的对象来创建新的线程,每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,这个方法是Thread类中最核心的方法,在run()方法里写什么就执行什么,方法run()称为线程体。还可以通过调用Thead类的start()方法来启动一个线程。start()和run()两种方法是有区别的,下谈。
    
java中怎么要启动一个新的线程:①定义线程类实现Runable接口 ②继承Thread类
    
    
    //温习面向对象的内容:
    //                                  1.实现该接口必须重写该接口的方法
    //2.多态的存在必须满足三个条件
    //①继承的存在
    //②父类引用指向子类对象
    //③重写父类的方法
    
    //实现多线程机制的方法:
    //        1.定义一个线程类并且要实现Runnable接口,编译器会自动认出这是一个线程类
    //        2.在线程类中重写run()方法,run()方法里的代码就是支线程执行的内容
    //        3.创建线程类的一个实例,将实例扔给Thread new实例时的构造方法
    //        4.调用Thread实例的start()方法启动一个线程
    
    //实现多线程机制的另一种方法:
    //        1.定义一个线程类并且要继承Thread类
    //        2.在线程类中重写run()方法并且写上支线程的代码
    //        3.由于本身Thread类了,所以不需要new一个Thread类用构造方法把之前的实例扔进去
    //        4.直接new出线程类,调用start()方法即可

    那么两种实现多线程机制的方法哪种好呢?由于继承是比较死的东西,java不支持多继承,而使用接口实现的话,可以实现多个接口比较灵活,所以推荐在写线程类的时候多使用接口实现的方法。

    start()和run()是两种不同的调用方法,start()是真正的多线程并行,而直接调用run()直接简单的调用方法,先执行完run()方法返回到mian方法才能往下执行。PS:多查Java API文档。

    线程控制基本方法:
    
    
    sleep方法:Thread类提供的这个方法可以指定毫秒让线程
暂停执行;
    join方法:合并某个线程,假设当支线程执行到一半的时候调用了这个方法,就会暂停主线程的执行,等待支线程执行完毕之后返回才开始继续执行主线程;
    yield方法:调用这个方法的时候,就让线程暂停一会,让出CPU让其他线程先执行;
    

    线程的优先级别:
    java提供一个线程调度器来监控程序中启动后进入就绪状态的所有线程;
    线程调度器按照线程的优先级决定应调度哪个线程来执行;
    简单的说,优先级越高的得到CPU时间片的长度就越长,缺省值默认是5;
    可以通过调用
setPriority方法设置程序的优先级,分别1~10。
0 0
原创粉丝点击