进程和线程

本文介绍了进程和线程的概念,强调线程是CPU调度的基本单位,多线程用于提高程序效率。Java中创建线程有两种方式,即继承Thread类和实现Runnable接口。线程有五种状态,包括创建、就绪、运行、阻塞和死亡。线程同步是为了解决多个线程访问共享资源时的竞态条件,synchronized关键字用于实现这一目标。
摘要由CSDN通过智能技术生成

一.进程和线

进程:应用程序的执行实例。 有独立的内存空间和系统资源

线程:CPU调度和分派的基本单位。进程中执行运算的最小单位,可完成一个独立的顺序控制流程

多线程

如果在一个进程中同时运行多个线程,用来完成不同的工作,则称之为“多线程”

并发执行

通常表示同一个时刻有多条指令代码在处理器上同时运行

往往需要多个处理器支持

并发运行

表示在一个处理器中,操作系统为了提高程序的运行效率,将CPU的执行时间分成多个时间片,分配给同一进程的不同线程

多个线 程分享CPU时间,交替执行

主线程

Java程序启动时,一个线程立即随之启动,通常称之为程序的主线程

 2线程创建与启动

两种创建线程的两种方式

继承java.lang.Thread类

实现java.lang.Runnable类

实现线程步骤

定义线程----->创建线程对象------>启动线程

继承Thread类创建线程

自定义线程类继承自Thread类

重写run()方法,编写线程执行体

创建线程对象,调佣start()方法启动线程

Thread类的run()是线程运行的起点

线程休眠

3实现Runnable接口创建线程

Runnable接口位于java.lang包

只提供一个抽象方法run()的声明

实现步骤

1.定义MyRunnable类实现Runable接口

2.实现run()方法,编写线程执行体

3.创建线程对象,调用Start()方法启动线程

比较两种创建线程的方式

继承Thread类

1.编写简单,可直接操作线程

2.使用于单继承

实现Runnable接口

避免单继承局限性

便于共享资源

4状态

通常,线程的生命周期有五种状态

阻塞状态,运行状态死亡状态

就绪状态,创建状态

线程运行完毕

有比当前线程优先级更高的线程抢占了CPU

线程休眠

线程因等待某个资源而处于堵塞状态

指按照特定机制为多个线程分配CPU的使用权

每个线程执行都具有一定的优先级

常用的线程操作方法

 join()方法的重载方法

millis:以毫秒为单位的等待时长

nanos: 要等待的附加纳秒时长

暂停当前线程,允许其他具有相同的优先级的线程获得运行机会

该线程处于就绪状态,不转为阻塞状态

yield()方法定义

共同点

Thread类的静态方法

会使当前处于运行状态的线程放弃CPU使用权,将运行机会让给其他线程

不同点

sleep()方法会给其他线程运行机会,不考虑其他线程的优先级因此较低优先级线程可能会获得运行机会

yield()方法只会将运行机会让给相同优先级或者更高级的线程

调用sleep()方法需要处理lnterruptedException异常,而调用yield()方法无此要求

线程同步的特征

不同的线程在执行以同一个对象作为锁定标记的同步代码块或者同步方法时,因为要获得这个对象的锁而互相牵制

多个并发线程访问同一资源代码块或同步方法时

同一时刻只能有一个线程进入synchronized(this)同步代码块

当一个线程访问一个synchronized(this)同步代码块时,其他线程可以访问该资源的非synchronized(this)同步代码

如果多个线程访问的不是同一共享资源,无法同步

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值