多线程系列基础(一)

线程与进程区别

概念:

  • 进程是指一个内存中运行的应用程序,比如在Windows系统中,一个运行的exe就是一个进程。
  • 线程是指进程中的一个执行流程。

区别:

  • 一个程序至少有一个进程,而一个进程至少有一个线程。一个应用程序可以同时启动多个进程。例如对于IE浏览器程序,每打开一个IE浏览器窗口,就启动了一个新的进程。而线程则是指进程中的一个执行流程,一个进程可以有多个线程,每个线程分别执行不同的任务,当进程内的多个线程同时运行时,这种运行方式就被称为并发运行。
  • 每个进程在执行过程中都拥有独立的内存单元,而同一个进程中的多个线程则共享内存,从而极大地提高了程序的运行效率。

创建线程两种方式

Thread

这里写图片描述

Runnable

这里写图片描述

Thread和Runnable区别

  • 在Java中,类仅支持单继承,如果创建自定义线程类的时候是通过扩展 Thread类的方法来实现的,那么这个自定义类就不能再去扩展其他的类,也就无法实现更加复杂的功能。因此,如果自定义类必须扩展其他的类,那么就可以使用实现Runnable接口的方法来定义该类为线程类,这样就可以避免Java单继承所带来的局限性。
  • 实现Runnable接口的方式创建的线程可以处理同一资源,从而实现资源的共享.

总结:实现Runnable接口相对于扩展Thread类来说,具有无可比拟的优势。这种方式不仅有利于程序的健壮性,使代码能够被多个线程共享,而且代码和数据资源相对独立,从而特别适合多个具有相同代码的线程去处理同一资源的情况。这样一来,线程、代码和数据资源三者有效分离,很好地体现了面向对象程序设计的思想。因此,几乎所有的多线程程序都是通过实现Runnable接口的方式来完成的。

线程的生命周期

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述


*线程启动和生命周期
 *Java应用程序的main方法是一个线程,是被JVM调用,线程名为main。
 *实现一个线程必须创建Thred实例,复写run()方法,调用start()方法。
 *在JVM启动后,实际有多个线程,但至少有一个非守护线程。
 *当调用一个线程start()方法时,至少有两个线程,(以main方法为例)一个是调用你的线程(mian线程)
 *一个是执行run()方法法人线程(被创建的线程)。
 *线程生命周期分为new,runable,runing,block,termate
 /**
 * 调用start方法,执行了run方法
 * 实际用的是模板方法
 */

什么是模块方法呢?该如何理解?看下面例子就能明白:

/**
 *模板方法
 * */
public abstract class TemplateMethad {

    public final void print(String message){
        System.out.println("++++++++++++++++++++++++++++++++++++++");
        printMethod(message);
        System.out.println("++++++++++++++++++++++++++++++++++++++");
    }

    protected abstract void printMethod(String message);


    public static void main(String[] args) {
        TemplateMethad c=new TemplateMethad(){
            @Override
            protected void printMethod(String message) {
                System.out.println(message);
            }
        };
        c.print("haha ha ha haha");
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值