java多线程(一)

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

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

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

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

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

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

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

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

                                                                                       线程的状态转化图

                                                                                        进程和线程的区别

二、java中的线程

1.线程的创建和启动

1)方式一:继承Thread类

     继承Thread类,重写run()方法,然后直接new这个对象的实例,创建一个线程的实例,

     调用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.便于共享资源

3.在这种方式下,可以多个线程共享一个Runnable target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好的体现了面向对象的思想。

2)方式二:实现Runable接口

  实现Runnable接口,重写run()方法,然后调用new Thread(runnable)的方式创建一个线程,

  调用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....");
        }
    }

}
采菊东篱下,悠闲现南山~
原文地址:https://www.cnblogs.com/ChaosJu/p/4528895.html