java多线程(二)-线程的生命周期及线程间通信
一、摘要
当我们将线程创建并start时候,它不会一直占据着cpu执行,而是多个线程间会去执行着这个cpu,此时这些线程就会在多个状态之间进行着切换。
在线程的生命周期中,它会有5种状态,分别为:创建、准备、执行、阻塞、死亡
二、线程生命周期状态详解
1、创建状态:其实就是new Thread()创建了线程对象,这个时候JVM会为其分配其内存,并初始化成员变量的值
2、准备状态:指的是线程的对象调用start方法时,这个时候的状态称为准备状态
3、执行状态:指的是此刻线程会去执行这个cpu,并且会调用线程中的run方法
4、阻塞状态:指的是当该线程调用sleep(),wait()、suspend()等方法时,这个时候线程就会失去其占用的资源,从而进入到阻塞状态中
5、死亡状态:指的是当线程执行完run方法时,或者抛出一个异常,或者调用了stop()方法,这个时候就会称为线程死亡
五个状态之前的切换图如下:

三、线程的一些方法调用
1、sleep()方法:此方法指的是线程会进行睡眠,进入到阻塞状态,直到时间结束时会自动醒来,但在此过程中不会去抢夺cpu,但不会释放锁,同时醒来后也不会立即就能执行,仍然需要去进行抢夺
2、wait()方法:此方法会将线程进入到阻塞状态,不会去抢夺cpu,但是会释放锁,直到被其他线程唤醒后,才会去接着执行,醒来也不一定会立即能执行,仍然需要去抢夺cpu和锁才能执行
3、notify()方法:此方法会将线程进行唤醒,如果有多个线程被wait住,此时notify会随机去唤醒一个线程,醒来后的线程仍然需要去抢夺cpu和锁资源
4、notifyAll()方法:此方法会唤醒所有的线程
5、stop()方法:停止当前线程,但方法过时,不推荐使用
6、interrupt()方法:该方法会对当前线程进行中断标志设计,将中断标志设为true后,如果后面线程调用了wait()、join()、sleep()三者任一方法,则会抛出中断异常,从而停止当前线程的执行
7、setDaemon()方法:该方法称为守护线程,即当线程结束时,从属于这个线程的守护线程也会结束
8、join()方法:即临时加入一个线程,此时当前线程会进入到阻塞状态,直到临时加入的线程执行完之后,当前线程才会去执行
9、setPriority():设置线程执行优先度
10、yield() :暂停当前线程,执行其他线程
四、线程间的通信
利用上述wait()、notifyAll方法可以对线程间进行调用,案例代码如下:
public class ProConsDemo {
public static void main(String[] args) {
Person person=new Person();
new Thread(new Pro(person)).start();
new Thread(new Cons(person)).start();
}
}
class Person{
String person=null;
}
class Pro implements Runnable{
private Person person;
public Pro(Person person) {
this.person = person;
}
long i=0;
@Override
public void run() {
while(true){
synchronized (person){
person.person="name"+i;
System.out.println("生产了"+person.person);
i++;
try {
person.notify();
person.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
class Cons implements Runnable{
private Person person;
public Cons(Person person) {
this.person = person;
}
@Override
public void run() {
while (true){
synchronized (person){
System.out.println("消费了"+person.person);
try {
person.notify();
person.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
java多线程(二)-线程的生命周期及线程间通信的更多相关文章
- java多线程(2)---生命周期、线程通讯
java生命周期.线程通讯 一.生命周期 有关线程生命周期就要看下面这张图,围绕这张图讲解它的方法的含义,和不同方法间的区别. 1.yield()方法 yield()让当前正在运行的线程回到就绪 ...
- Java学习笔记之——线程的生命周期、线程同步
一. 线程的生命周期 新建(new Thrad):创建线程后,可以设置各个属性值,即启动前 设置 就绪(Runnable):已经启动,等待CPU调动 运行(Running):正在被CPU调度 阻塞(B ...
- java之线程(线程的创建方式、java中的Thread类、线程的同步、线程的生命周期、线程之间的通信)
CPU:10核 主频100MHz 1核 主频 3GHz 那么哪一个CPU比较好呢? CPU核不是越多越好吗?并不一定.主频用于衡量GPU处理速度的快慢,举个例子10头牛运送货物快还是1架飞机运 ...
- Java 之 线程的生命周期(线程状态)
一.线程的生命周期 (1)新建状态 new 好了一个线程对象,此时和普通的 Java对象并没有区别. (2)就绪 就绪状态的线程是具备被CPU调用的能力和状态,也只有这个状态的线程才能被CPU调用.即 ...
- Java—线程的生命周期及线程控制方法详解
线程生命周期5种状态 介绍 线程的生命周期经过新建(New).就绪(Runnable).运行(Running).阻塞(Bolocked)和死亡(Dead) 状态转换图 新建(New) 程序使用 ...
- java多线程回顾2:生命周期与控制
1. 线程生命周期概述 线程的生命周期如下图: 2. 新建与就绪 当程序使用new关键字创建一个线程之后,线程就处于新建状态了.此时线程只是被分配了内存资源,初始化了成员变量. 当线程对象被调用了 ...
- Java-多线程第三篇3种创建的线程方式、线程的生命周期、线程控制、线程同步、线程通信
1.Java使用Thread类代表线程. 所有的线程对象必须是Thread类或其子类的实例. 当线程继承Thread类时,直接使用this即可获取当前线程,Thread对象的getName() ...
- java基础24 线程、多线程及线程的生命周期(Thread)
1.1.进程 正在执行的程序称作为一个进程.进程负责了内存空间的划分 疑问1:windows电脑称之为多任务的操作系统,那么Windows是同时运行多个应用程序呢? 从宏观的角度:windows确实在 ...
- 深入Java线程管理(二):线程的生命周期
Java线程的生命周期 一个线程的产生是从我们调用了start方法开始进入Runnable状态,即可以被调度运行状态,并没有真正开始运行,调度器可以将CPU分配给它,使线程进入Running状态,真正 ...
随机推荐
- HTML5可以省略结束标记的元素
HTML5可以省略结束标记的元素 1.dd 2.dt 3.li 4.p 5.optgroup 6.option 7.rt 8.rp 9.thread 10.tfoot 11.tr 12.td 13.t ...
- BUAA软工第0次作业
第一部分:结缘计算机 1.你为什么选择计算机专业?你认为你的条件如何?和这些博主比呢?(必答) 我在大学之前甚至连一个萌新都算不上,根本没有任何一点计算机专业的基础. 因此在进入大学之前,计算机对于我 ...
- ASP.NET Core MVC中构建Web API
在ASP.NET CORE MVC中,Web API是其中一个功能子集,可以直接使用MVC的特性及路由等功能. 在成功构建 ASP.NET CORE MVC项目之后,选中解决方案,先填加一个API的文 ...
- Centos7.2 搭建Lamp服务器以及迁移WordPress个人博客详细过程
其实自己的博客搭了有段时间了,但是由于自己不太确定是不是一定要用wd的框架,以及实验室公网服务器的不稳定,就一直荒废着. 今天偶然间看到了腾讯云对于学生的优惠活动,毕业之前每月只要8元的云服务器(就算 ...
- SpringBoot 文件上传临时文件路径问题
年后放假回来,一向运行OK的项目突然图片上传不了了,后台报错日志如下: java.io.IOException: The temporary upload location [/tmp/tomcat. ...
- Entity Framework Core 2.1 Preview1 新增功能简介
两个星期前,微软发布了EF Core 2.1 Preview 1,同时还发布了.NET Core 2.1 Preview 1和ASP.NET Core 2.1 Preview 1:EF Core 2. ...
- 没什么技术含量的Remove Before Flight
航空业有很多值得我们借鉴和学习的工作方式,将来有时间我会给大家引荐更多实例. 仔细观察每架停泊着的飞机,会发现机身很多地方都挂着细长的红布条,上面写着"REMOVE BEFORE FLIGH ...
- 【SDOI2009】HH去散步(矩阵快速幂)
题面 题目描述 HH有个一成不变的习惯,喜欢饭后百步走.所谓百步走,就是散步,就是在一定的时间 内,走过一定的距离. 但是同时HH又是个喜欢变化的人,所以他不会立刻沿着刚刚走来的路走回. 又因为HH是 ...
- Luogu 睡觉困难综合征 ([NOI2014]起床困难综合症)
一.[NOI2014]起床困难综合症 题目描述 网址:https://daniu.luogu.org/problemnew/show/2114 大意: 有一条链,链上每一个节点包含一个位运算f 与 一 ...
- [BZOJ1607] [Usaco2008 Dec] Patting Heads 轻拍牛头 (数学)
Description 今天是贝茜的生日,为了庆祝自己的生日,贝茜邀你来玩一个游戏. 贝茜让N(1≤N≤100000)头奶牛坐成一个圈.除了1号与N号奶牛外,i号奶牛与i-l号和i+l号奶牛相邻.N号 ...