码迷,mamicode.com
首页 > 编程语言 > 详细

java多线程

时间:2015-05-25 22:14:10      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

一、程序、进程、线程的定义

 程序:  一段静态的代码,一组指令的有序集合,它本身没有任何运行的含义,它只是一个静态的实体,是应用软件执行的蓝本。

 进程:  是程序的一次动态执行,它对应着从代码加载,执行至执行完毕的一个完整的过程,是一个动态的实体,它有自己的生命

          周期。  它因创建而产生,因调度而运行,因等待资源或事件而被处于等待状态,因完成任务而被撤消。反映了一个程序在

          一定的数据 集上运行的全部动态过程。通过进程控制块(PCB)唯一的标识某个进程。同时进程占据着相应的资源(例如包

          括cpu的使用 ,轮转时间以及一些其它设备的权限)。是系统进行资源分配和调度的一个独立单位。

 线程:   一个线程是进程的一个顺序执行流。可以理解为进程的多条执行线索,每条线索又对应着各自独立的生命周期。

          线程是进程的一个实体,是CPU调度和分派的 基本单位,它是比进程更小的能独立运行的基本单位。

                                                          线程的状态转化图

技术分享

进程和线程的区别

技术分享

二、java中的线程

1.线程的创建和启动

1)方式一:继承Thread类

    可以通过创建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.便于共享资源

2)方式二:实现Runable接口

  定义线程类实现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....");
        }
    }

}

 

java多线程

标签:

原文地址:http://www.cnblogs.com/ChaosJu/p/4528895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!