A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 我是刘通 中级黑马   /  2015-10-9 23:01  /  282 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  一、进程与线程
进程:正在进行中的程序。进程是程序的一次动态执行过程,它经历了从代码加载、执行到执行完毕的一个完整过程,这个过程也是进程本身从产生、发展到最终消亡的过程。多进程操作系统能同时运行多个进程(程序),由于CPU具备分时机制,所以每个进程都能循环获得自己的CPU时间片。由于CPU执行速度非常快,使得所有程序好像是在“同时”运行一样。
线程:线程是比进程更小的执行单位,线程是在进程的基础上进行的进一步划分。所谓多线程是指一个进程在执行过程中可以产生多个线程,这些线程可以同时存在、同时运行,一个进程可能包含了多个同时执行的线程。
一个进程至少有一个线程在运行,当一个进程中出现多个线程时,就称这个应用程序是多线程应用程序,每个线程在栈区中都有自己的执行空间,自己的方法区、自己的变量。
jvm在启动的时,首先有一个主线程,负责程序的执行,调用的是main函数。主线程执行的代码都在main方法中。
当产生垃圾时,收垃圾的动作,是不需要主线程来完成,因为这样,会出现主线程中的代码执行会停止,会去运行垃圾回收器代码,效率较低,所以由单独一个线程来负责垃圾回收。
所有的线程一定要依附于进程才能够存在,进程一旦消失线程也一定会消失。

二、多线程的实现
1,继承Thread ,由子类复写run方法
    步骤:1,定义类继承Thread类;
              2,目的是复写run方法,将要让线程运行的代码都存储到run方法中;
              3,通过创建Thread类的子类对象,创建线程对象;
               4,调用线程的start方法,开启线程,并执行run方法。

                         三、线程状态
    创建状态:在程序中用构造方法创建了一个线程对象后,新的线程对象便处于新建状态,此时,它已经有了相应的内存空间和其他资源,但还处于不可运行状态,等待start()启动。
    就绪状态:新建线程对象后,调用该线程的start()方法就可以启动线程。当线程启动时,即进入就绪状态。此时,线程将进入线程队列排队,等待CPU服务,这表明它已经具备了运行条件。
    运行状态:当就绪状态的线程被调用并获得处理器资源时,线程就进入了运行状态。此时,自动调用该线程对象的run()方法。run()方法定义了该线程的操作和功能。
    阻塞状态:一个正在运行的线程在某些特殊情况下,如被人为挂起或需要执行耗时的输入输出操作时,将让出CPU并暂时中止自己的执行,进入堵塞状态。在可执行状态下,如果调用sleep()、wait()等方法,线程都将进入堵塞状态。堵塞时,线程不能进入排队队列,只有当引起堵塞的原因被消除后,线程才可以转入就绪状态。
    临时阻塞状态:线程具备cpu的执行资格,没有cpu的执行权;
    消亡状态:线程调用stop()方法或run()方法执行结束后,线程即处于终止状态。处于终止状态的线程不具有继续运行的能力。

多线程的其他常用方法:
    interrupt():中断线程。
    setPriority(int newPriority):更改线程的优先级。
    getPriority():返回线程的优先级。
    toString():返回该线程的字符串表示形式,包括线程名称、优先级和线程组。
    Thread.yield():暂停当前正在执行的线程对象,并执行其他线程。
    setDaemon(true):将该线程标记为守护线程或用户线程。将该线程标记为守护线程或用户线程。当正在运行的线程都是守护线程时,Java 虚拟机退出。该方法必须在启动线程前调用。
    join:临时加入一个线程的时候可以使用join方法。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马