多线程(初始)

1. 线程为何诞生?

操作系统控制并发以及资源分配是以进程为基本单位,这很棒,但是每次资源的分配和回收是个比较费时间的问题,为了减少资源分配回收在高频度调用的情况下浪费的时间,并同时保持较高的并发性,所以出现了线程一个比进程更加轻量级的调度单位! (听说go语言还有比线程更小的好像叫管程…);

2. java 中对线程的定义以及使用!

2.1 定义

java 中对线程的抽象具体表现是 Thread 类!
在这里插入图片描述>可以看到 Thread 是实现了Runable 接口的! 那Runable 接口时干啥的?
在这里插入图片描述
根据源码的注释翻译可以发现,Runable 接口定义的是,当有类实现这个接口,并创建线程时,
会单独用一个线程来执行这个对象的run方法!

2.2 使用

  • 线程想要使用,就要先创建,创建有两种方式
    • 写一个自己的线程类继承Thread类,重写这个Thread类的run() 方法!
    • 写一个类实现Runable接口,实现run() 方法,并创建一个Thead类将实现Runable接口的类的对象传递作为构造参数!
    • 当然,我们可以发现这些run() 方法返回值都是 void 如果我们想要获得线程执行结束后的结果怎么办? 这个就涉及到线程之间的通信了!(后面的博客会讲这里做个铺垫…)
      在这里插入图片描述* 线程的使用就很简单了,用Thread类的实例调用start() 方法即可!(我认为,这个start() 方法就是,创建线程,并将run() 中的代码放入线程的代码段,让后将线程放入执行队列中!))

在这里插入图片描述
start() 是一个线程安全的方法!
在这里插入图片描述
调用其他语言的方法(其实是调用操作系统实现的接口),实现线程创建!
在这里插入图片描述
有兴趣的盆友可以,去看源码的具体实现!

3. 线程一系列

3.1 线程的常见属性

在这里插入图片描述

3.2 线程的常见方法

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.3 线程的状态

  • NEW: 安排了工作, 还未开始行动
  • RUNNABLE: 可工作的. 又可以分成正在工作中和即将开始工作.
  • BLOCKED: 这几个都表示排队等着其他事情
  • WAITING: 这几个都表示排队等着其他事情
  • TIMED_WAITING: 这几个都表示排队等着其他事情
  • TERMINATED: 工作完成了

状态转移图:
在这里插入图片描述

状态的形象理解
在这里插入图片描述

4. 线程安全问题

4.1 问题存在的原因

在这里插入图片描述
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值