线程基础

 线程和进程

进程

    正在运行的程序,是一个程序的运行状态和资源占用(内存,CPU)的描述,通过进程ID区分。
    进程是程序的一个动态过程,它指的是从代码加载到执行完毕的一个完成过程
    进程的特点:
        a.独立性:不同的进程之间是独立的,相互之间资源不共享(举例:两个正在上课的教室有各自的财            
        产,相互之间不共享)
        b.动态性:进程在系统中不是静止不动的,而是在系统中一直活动的
        c.并发性:多个进程可以在单个处理器上同时进行,且互不影响

 

线程 

   线程就是一条执行路径。是进程的组成部分,一个进程可以有多个线程,每个线程去处理一个特定的子任务

    线程的执行是抢占式的,多个线程在同一个进程中可以并发执行,其实就是CPU快速的在不同的
    线程之间切换,也就是说,当前运行的线程在任何时候都有可能被挂起,以便另外一个线程可以运行

进程和线程的关系以及区别

a.一个程序运行后至少有一个进程
b.一个进程可以包含多个线程,但是至少需要有一个线程,否则这个进程是没有意义的
c.进程间不能共享资源,但线程之间可以
d.系统创建进程需要为该进程重新分配系统资源,而创建线程则容易的多,因此使用线程实现多任务并发比多进程的效率高

线程的实现方式有三种 

继承Thread类

继承自Thread类,Thread类是所有线程类的父类,实现了对线程的抽取和封装

继承Thread类创建并启动多线程的步骤:
		定义一个类,继承自Thread类,并重写该类的run方法,该run方法的方法体就代表了
    线程需要完成的任务,因此,run方法的方法体被称为线程执行体
		创建Thread子类的对象,即创建了子线程
		用线程对象的start方法来启动该线程

 

实现Runnable接口

实现Runnable接口创建并启动多线程的步骤:

		a.定义一个Runnable接口的实现类,并重写该接口中的run方法,该run方法的方法体同样是该线程的线程执行体
		b.创建Runnable实现类的实例,并以此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象
		c.调用线程对象的start方法来启动该线程    

 

使用Callable接口

 

线程中的基础方法

 


//线程休眠 释放时间片  进入阻塞状态
Thread.sleep(); 


//设置线程的名称
Thread.setName("name");

//线程合并
Thread.join(); 

//隐藏起来 默默运行的线程 JVM的垃圾回收线程就是典型的后台线程
//特征:如果所有的前台线程都死亡,后台线程会自动死亡,设置后台线程必须要在start之前执行
Thread.setDaemon(true); //设置后台线程  

//可以让当前线程暂停 但不会进入阻塞状态
Thread.yield();

//打断线程
Thread.interrupt();

线程的生命周期

New(新生):线程被实例化,但是还没有开始执行

Runnable(就绪):没有抢到时间片
Running(运行):抢到了时间片,CPU开始处理这个线程中的任务
Blocked(阻塞):    线程在执行过程中遇到特殊情况,使得其他线程就可以获得执行的机会,被阻塞的线程会等待合适的时机重新进入就绪状态
Dead(死亡):线程终止
    a.run方法执行完成,线程正常结束【正常的死亡】
    b.直接调用该线程的stop方法强制终止这个线程

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值