Java多线程

    xiaoxiao2022-07-05  150

    一、Java多线程机制

        1、java的多线程机制         Java虚拟机快速地把控制从一个线程切换到另一个线程。每个应用程序都有一个缺省的线程。              2、线程的状态和生命周期         线程的一个完整的生命周期主要经历如下四个状态:         (1)、新建         (2)、运行:线程必须调用start()方法通知JVM,这样JVM就会知道又有一个新的线程排队等候切换了         (3)、中断:有四种中断方式             JVM将CPU资源从当前线程切换到其他线程             线程调用sleep(int millsecond)方法             线程执行wait()方法             线程执行某个操作进入阻塞状态         (4)、死亡          3、线程调度与优先级         JVM中的线程调度器负责管理线程,调度器把线程的优先级分为10个级别,Java调度器的任务是使高优先级的线程能始终运行,一旦时间片空闲,则使其有相同优先级的线程          以轮流的方式顺序使用时间片。

    二、Thread类实现多线程     1、Thread的子类创建线程         在Java语言中,用Thread类或者子类创建线程对象。         在编写Thread类的子类时,需要重写父类的run()方法,目的是规定线程的具体操作,否则线程什么也不做,因为父类的run()方法中没有任何操作语句。

    三、Runnable接口实现多线程     1、使用Thread子类创建线程的优点:可以在子类中增加新的成员变量,也可以增加新的方法。        但是Java不支持多继承,Thread类的子类不能再扩展其他的类          2、Runnable 接口与目标对象        创建线程的另一个途径就是使用Thread类直接创建线程对象,使用Thread创建线程通常的构造方法:Thread (Runnable target);        在创建线程对象时必须向构造方法的参数传递一个实现Runnable接口类的实例,该实例对象称作所创建线程的目标对象,当线程        调用start()方法后,一旦轮到它来享用CPU资源,目标对象就会自动调用接口中的run方法。

        3、实现Runnable和继承Thread的区别        (1)、一个类只能继承一个父类,存在局限;一个类可以实现多个接口        (2)、在实现Runnable接口的时候调用Thread(Runnable target)创建线程时,使用同一个Runnable实例,则建立的多线程的实例变量         也是共享的,但是通过Thread类是不能用一个实例建立多个线程,故而实现Runnable接口适合于资源共享。当然,继承Thread类         也能共享变量,能共享Thread类的static变量。        (3)、Runnable接口和Thread之间的联系         public class Thread extends Object implements Runnable         可以看出Thread类也是Runnable接口的子类。

    四、线程常用方法和线程同步     1、线程的常用方法         (1)、start():线程调用该方法将启动线程         (2)、run():用来定义线程对象被调度之后所执行的操作         (3)、sleep(int millsecond); 优先级高的线程可以在他的run()方法中调用sleep方法来使自己放弃CPU资源,休眠一段时间         (4)、isAlive():在线程的run()方法结束之前,即没有进入死亡状态之前,线程调用isAlive()返回true。         (5)、currentThread():该方法是Thread类中的类方法,可以用类名调用,该方法返回当前正在使用CPU资源的线程。         (6)、interrupt():一个占有CPU资源的线程可以让休眠的线程调用interrupt()方法“吵醒”自己,即导致休眠的线程发生InterruptedException异常,从而结束休眠,重新排队等待CPU资源。

        2、线程同步         所谓线程同步就是若干个线程都需要使用一个synchronized修饰的方法,即程序中的若干线程都使用一个方法,这个方法用synchronized给予了修饰。         多个线程调用synchronized方法必须遵守同步机制:当一个线程使用这个方法时,其他线程想使用这个方法时必须等待,直到线程使用完该方法。在使用多线程解决许多实际问题时,可能要把某些         修改数据的方法用关键字synchronized来修饰。

    最新回复(0)