Java基础线程

进程与线程

进程(process):操作系统的任务单元,每一个程序启动后操作系统都会为其分配进程编号PID

线程(Thread):是进程的任务单元,程序启动的时候首先会创建主线程,可以在主线程中开辟子线程,每一个线程都对应一个虚拟机栈,栈是私有的,堆和方法区是线程共享的

1.进程的定义

    进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。进程实体由程序段, 数据段 PCB(进程控制块)组成。

2.线程的定义

   线程可以看做轻量级进程,线程是进程的执行单元,是进程调度的基本单位。

3.并行与并发的定义

    并行(parallel)是指在同一时刻,有多条指令在多个处理器上同时运行;并发(concurrency)指的是在同一时刻只能有一条指令执行,即每个指令以时间片为单位来执行 。
 

串行

在一台机器上单线程执行

并行

   并发:在同一台机器上多线程并执行(存在资源竞争关系)

   并行:在多台的机器上并行执行(不存在资源竞争关系)

Java中实现多线程的方式有4种

  1. 继承Thread类,重写run方法
  2. 实现Runnable,重写run方法
  3. 实现Callable接口,重写call方法
  4. 使用线程池类

1>继承Thread类,重写该类的run()方法,也就是这个线程需要完成的任务,线程对象的start()方法可以用来启动该线程 
使用继承Thread类的方法来创建线程类时,多个线程之间无法共享线程类的实例变量。

2>实现Runnable接口,同样的在run()方法中编写需要线程实现的操作,采用线程对象的start()方法启动, 
使用实现Runnable接口的方法来创建线程类时,多个线程之间可以共享线程类的实例变量。

3>采用实现Runnable,Callable接口优缺点: 
1,接口可以多继承,继承了Runnable接口还能继承其他接口 
2,适合多个相同线程来处理同一份资源的情况, 
3,缺点是,编程稍微复杂,访问当前线程必须使用Thread.currentThread() 
采用继承Thread类优缺点: 
1,编写简单,访问当前线程可直接用this 
2,缺点是,不能再继承其他类 
综上,建议采用实现Runnable接口的方法来创建和启动线程

三种方式的区别

1与2和1与3 :1是继承类,2、3是接口

2与3:2没有返回值类型,3有返回值类型为泛型

1.新建(new):新创建了一个线程对象。

2.可运行(runnable):线程对象创建后,当调用线程对象的start()方法,该线程处于就绪状态,等待被线程调度选中,获取cpu的使用权。

3.运行(running):可运行状态(runnable)的线程获得了cpu时间片(timeslice),执行程序代码。注:就绪状态是进入到运行状态的唯一入口,也就是说,线程要想进入运行状态执行,首先必须处于就绪状态中;

4.阻塞(block):处于运行状态中的线程由于某种原因,暂时放弃对CPU的使用权,停止执行,此时进入阻塞状态,直到其进入到就绪状态,才有机会再次被CPU调用以进入到运行状态。

阻塞的情况分两种:

1.阻塞时候释放锁2.阻塞时候不释放锁

5.死亡(dead):线程run()、main()方法执行结束,或者因异常退出了run()方法,则该线程结束生命周期。死亡

的线程不可再次复生。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值