JAVA多线程

多线程

进程和线程的区别

1.进程:电脑中的应用程序 有独立的系统资源和内存空间
2.线程:进程中每一个独立的任务 互相为竞争关系

多线程的好处

1,充分利用CPU资源
2,简化代码
3,提高用哪个户体验

创建线程的两种方式

1.继承java.lang.Thread类
2.实现java.lang.Runnable接口

多线程的创建步骤

1.定义线程(继承Thread类/实现Runnable接口)
实现Runnable接口:
在这里插入图片描述
继承Thread类:
在这里插入图片描述

2.创建线程的对象
继承Thread类:在这里插入图片描述
实现Runnable接口:
在这里插入图片描述

3.启动线程
继承Thread类:
在这里插入图片描述

实现Runnable接口:
在这里插入图片描述

4.终止线程
线程执行完成自己的任务后会自己死亡,无需写代码。

注意:
调run和调start的区别:

  • run:当前程序中只有main一条线程,所有事情需要main来完成
  • start:开启一个全新的线程,主线程负责main方法中的代码,开启的线程负责run方法中的代码,各司其职在

Thread和Runnable两种方式的区别

  • Thread:数据资源各论各的,单继承,创建线程很简单
  • Runnable:数据资源共享,避免单继承的局限性

线程的五个状态

  1. 创建状态:ThreadA ta=new ThreadA();
  2. 就绪状态:线程启动以后,没有抢占到CPU资源
  3. 运行状态:线程抢到资源开始完成自己的任务
  4. 阻塞状态:程序员调用某个方法将线程转入休眠状态,冻结
    不会和其他线程抢占资源
  5. 死亡状态:调用方法+自然死亡

线程优先级

含义:表示线程抢到CPU的概率 不绝对
取值范围:1-10 10最大(数值越大概率越大)

线程的相关方法

  1. currentThread:获取当前线程
  2. getName:获取线程的名字
  3. setName:修改线程的名字
  4. getPriority:获取线程优先级
  5. setPriority:修改线程优先级
  6. sleep:让线程休眠->阻塞状态
  7. join:强行插队
  8. yeild:线程l礼让
  9. interrupt:线程中断
  10. isAlive:判断线程是否处于活动状态(就绪/运行)

线程调度方法

  1. sleep:当前线程在指定 间内转入阻塞状态,时间没有结束前一直处于冻结,无法和其他线程抢占资源
  2. join:其他线程先把CPU资源让出来,让当前线程把自己的任务完成以 后,再把资源还给其他线程。适合处理紧急事件
  3. yeild:当前线程将资源吐出来,但是自己会立马转入就绪状态,继续和其他线程抢占资源。

线程同步

解决问题:多个线程抢占同一个资源出现冲突的问题
使用方法:使用synchronized修饰的方法控制对类成员变量的访问,synchronized就是为当前的线程声明一个锁
具体实现:

  1. 访问修饰符 synchronized 返回类型 方法名(参数列表){……}

     或者
    
  2. synchronized 访问修饰符 返回类型 方法名(参数列表){……} 在这里插入图片描述

  3. 使用synchronized关键字修饰的代码块

在这里插入图片描述

  • 线程安全:实现线程同步则认为线程是安全的,但是效率比较低

常见的线程安全类:

a,安全:hashTable和StringBuffer
b,不安全:hashmap和Stringbuilder

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值