标签:
程序: 一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本。
进程: 是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命
周期。 它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在
一定的数据 集上运行的全部动态过程。通过进程控制块(PCB)唯一的标识某个进程。同时进程占据着相应的资源(例如包
括cpu的使用 ,轮转时间以及一些其它设备的权限)。是系统进行资源分配和调度的一个独立单位。
线程: 一个线程是进程的一个顺序执行流。可以理解为进程的多条执行线索,每条线索又对应着各自独立的生命周期。
线程是进程的一个实体,是CPU调度和分派的 基本单位,它是比进程更小的能独立运行的基本单位。
线程的状态转化图
进程和线程的区别
可以通过创建Java.lang.Thread的实例来创建新的线程;
每个线程都是通过某个特定的Thread对象所对应的方法run()来完成其操作的,方法run()称为线程体;
通过调用Thread类的start()方法来启动一个线程。
继承Thread创建并启动,demo:
public class TestThread{ public static void main(String[] args) { //创建子类对象 Rabbit rab = new Rabbit(); //创建子类对象 Tortoise tor =new Tortoise(); //调用start 方法,不要调用run方法 rab.start(); tor.start(); } } /** * 模拟龟兔赛跑 1、创建多线程 继承Thread +重写run(线程体) 2、使用线程: 创建子类对象 + 对象.start() 线程启动 * * @author Chaosju * */ public class Rabbit extends Thread { @Override public void run() { //线程体 for(int i=0;i<100;i++){ System.out.println("兔子跑了"+i+"步"); } } } class Tortoise extends Thread { @Override public void run() { //线程体 for(int i=0;i<100;i++){ System.out.println("乌龟跑了"+i+"步"); } } }
注:
推荐使用方式二:实现Runable接口
1.避免单继承的局限性
2.便于共享资源
定义线程类实现Runable接口,重写run()方法;
可以通过创建Java.lang.Thread的实例来创建新的线程;
通过调用Thread类的start()方法来启动一个线程。
实现Runable创建并启动,demo:
/*使用 Runnable 创建线程 1、类实现 Runnable接口 +重写 run() -->真实角色类 2、启动多线程 使用静态代理 1)、创建真实角色 2)、创建代理角色 +真实角色引用 3)、调用 .start() 启动线程 */ public class Programmer implements Runnable { @Override public void run() { for(int i=0;i<1000;i++){ System.out.println("一边敲helloworld...."); } } } public class ProgrammerApp { public static void main(String[] args) { //创建线程类(真实角色) Programmer pro =new Programmer(); //创建代理角色 +真实角色引用 Thread proxy =new Thread(pro); //调用 .start() 启动线程 proxy.start(); for(int i=0;i<1000;i++){ System.out.println("一边聊qq...."); } } }
标签:
原文地址:http://www.cnblogs.com/ChaosJu/p/4528895.html