Java线程状态运行原理解析
这篇文章主要介绍了Java线程状态运行原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
代码实例如下
package com.fgy.demo05; /** * 等待唤醒案例:线程之间通信 * 注意: * 同步使用的锁对象必须唯一 * 只有锁对象才能调用wait和notify()/notifyAll()方法 */ public class Demo1WaitAndNotify { public static void main(String[] args) { Object obj = new Object(); new Thread() { @Override public void run() { synchronized (obj) { System.out.println("顾客告知要的包子和数量"); try { obj.wait(); // obj.wait(5000); // 如果5秒后没有被唤醒,则会自动醒来 } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("老板把包子做好了,可以开吃"); } } }.start(); new Thread() { @Override public void run() { try { Thread.sleep(5000); // 花费5秒做包子 } catch (InterruptedException e) { e.printStackTrace(); } synchronized (obj) { System.out.println("告知客户,可以吃包子了"); obj.notify(); } } }.start(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
相关推荐
-
学习Java多线程之线程定义、状态和属性
一 .线程和进程 1. 什么是线程和进程的区别: 线程是指程序在执行过程中,能够执行程序代码的一个执行单元.在java语言中,线程有四种状态:运行 .就绪.挂起和结束. 进程是指一段正在执行的程序.而线程有事也被成为轻量级的进程,他得程序执行的最小单元,一个进程可以拥有多个线程,各个线程之间共享程序的内功空间(代码段.数据段和堆空间)及一些进程级的资源(例如打开的文件),但是各个线程都拥有自己的棧空间. 2. 为何要使用多进程 在操作系统级别上来看主要有以下几个方面: - 使用多线程可以减少程序
-
Java线程的生命周期和状态控制_动力节点Java学院整理
一.线程的生命周期 线程状态转换图: 1.新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态.处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable). 注意:不能对已经启动的线程再次调用start()方法,否则会出现Javalang.IllegalThreadStateException异常. 2.就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列(尽管是采用队列形式,事实上,把它称
-
Java线程的新建和就绪状态实例分析
本文实例讲述了Java线程的新建和就绪状态.分享给大家供大家参考,具体如下: 一 点睛 当线程被创建启动以后,它既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建.就绪.运行.阻塞和死亡5种状态.当线程启动后,它不可能一直霸占CPU独自运行,所以CPU需要在多个线程之间切换,于是线程状态也会多次在运行和就绪之间切换. 当程序使用new关键字创建一个线程后,该线程就处于新建状态. 当线程对象调用start()方法之后,该线程就处于就绪状态,处于这个状态的线程并没有
-
Java实现监控多个线程状态的简单实例
实例如下: import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executor; import java.util.concurrent.Executors; /** * 测试监控类 * * @author * */ public class WatchThread { /** * 测试函数 * * @throws InterruptedException */ public void testThre
-
Java线程状态及切换、关闭线程的正确姿势分享
前言 在讲线程之前有必要讨论一下进程的定义:进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位.进程实体由程序段, 数据段 PCB(进程控制块)组成.线程又是什么?线程可以看做轻量级进程,线程是进程的执行单元,是进程调度的基本单位 本文将详细介绍关于Java线程状态及切换.关闭线程的相关内容,下面话不多说了,来一起看看详细的介绍吧 1.线程状态及切换 Java中的线程有六种状态,使用线程Thread内的枚举类来实现,如下,我对每个状态都进行了一定的解释. public
-
基于java 线程的几种状态(详解)
线程可以有六种状态: 1.New(新创建) 2.Runnable(可运行)(运行) 3.Blocked(被阻塞) 4.Waiting(等待) 5.Timed waiting(计时等待) 6.Terminated(被终止) 新创建线程: 当用new操作符创建一个新线程时,如new Thread(r),该线程还没有开始运行,它的当前状态为new,在线程运行之前还有一些基础工作要做. 可运行线程: 一旦线程调用start方法,线程处于runnable状态.在这个状态下的线程可能正在运行也可能没有运行(
-
总结Java中线程的状态及多线程的实现方式
线程的状态 线程状态图: 说明: 线程共包括以下5种状态. 1. 新建状态(New) : 线程对象被创建后,就进入了新建状态.例如,Thread thread = new Thread(). 2. 就绪状态(Runnable): 也被称为"可执行状态".线程对象被创建后,其它线程调用了该对象的start()方法,从而来启动该线程.例如,thread.start().处于就绪状态的线程,随时可能被CPU调度执行. 3. 运行状态(Running) : 线程获取CPU权限进行执行.需要注意
-
Java线程池运行状态监控实现解析
在实际开发过程中,在线程池使用过程中可能会遇到各方面的故障,如线程池阻塞,无法提交新任务等. 如果你想监控某一个线程池的执行状态,线程池执行类 ThreadPoolExecutor 也给出了相关的 API, 能实时获取线程池的当前活动线程数.正在排队中的线程数.已经执行完成的线程数.总线程数等. 总线程数 = 排队线程数 + 活动线程数 + 执行完成的线程数. 线程池使用示例: private static ExecutorService es = new ThreadPoolExecutor(
-
Java线程状态运行原理解析
这篇文章主要介绍了Java线程状态运行原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码实例如下 package com.fgy.demo05; /** * 等待唤醒案例:线程之间通信 * 注意: * 同步使用的锁对象必须唯一 * 只有锁对象才能调用wait和notify()/notifyAll()方法 */ public class Demo1WaitAndNotify { public static void main(Strin
-
java线程池中Worker线程执行流程原理解析
目录 引言 Worker类分析 runWorker(Worker)方法 getTask()方法 beforeExecute(Thread, Runnable)方法 afterExecute(Runnable, Throwable)方法 processWorkerExit(Worker, boolean)方法 tryTerminate()方法 terminated()方法 引言 在<[高并发]别闹了,这样理解线程池执行任务的核心流程才正确!!>一文中我们深度分析了线程池执行任务的核心流程,在Th
-
浅谈java线程状态与线程安全解析
目录 1.线程的几种状态 1.1 线程的状态 1.2 线程状态的转移 2.有关线程安全问题 2.1 一个简单的例子 2.2 造成线程不安全的原因 1.线程的几种状态 1.1 线程的状态 以下就是我们线程所有的状态和意义: NEW 已经创建Thread但未创建线程 RUNNABLE 可工作的. 又可以分成正在工作中和即将开始工作 BLOCKED 等待锁(阻塞状态) WAITING 调用wati方法(阻塞状态) TIMED_WAITING 调用sleep方法(阻塞状态) TERMINATED 系统线
-
Java线程安全基础概念解析
Java线程安全初步了解.JAVA线程安全从总体上来说,是指Java对象在多线程运行环境下的一种特性,表现为常规(区别于特殊调用情况)情况下每次调用都能得到正确的逻辑结果.从本质上来说,将对象的方法行为加上了同步控制逻辑,而调用者无须做其他额外的同步控制就可以安全放心的使用对象. 1.线程安全的定义 当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象就是线程安
-
java线程的基础实例解析
java中建立线程可以有两种方式,分别是继承Thread类和实现Runnable接口. 继承Thread public class MyThread extends Thread{ public MyThread(String name){ super(name); } int i; public void run(){ for(i=0;i<5;i++){ System.out.println(getName()+"--"+i); } } public static void m
-
Java方法参数传递机制原理解析
这篇文章主要介绍了Java方法参数传递机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 Java方法中如果声明了形参,在调用方法时就必须给这些形参指定参数值,实际传进去的这个值就叫做实参. 这就涉及到Java中的参数传递机制,值传递. 基本数据类型 基本数据类型,值传递的体现是数值的传递. public class TransferTempTest { public static void main(String[] args) {
-
GC参考手册二java中垃圾回收原理解析
内存碎片整理 每次执行清除(sweeping), JVM 都必须保证不可达对象占用的内存能被回收重用.但这(最终)有可能会产生内存碎片(类似于磁盘碎片), 进而引发两个问题: 写入操作越来越耗时, 因为寻找一块足够大的空闲内存会变得非常麻烦. 在创建新对象时, JVM在连续的块中分配内存.如果碎片问题很严重, 直至没有空闲片段能存放下新创建的对象,就会发生内存分配错误(allocation error). 要避免这类问题,JVM 必须确保碎片问题不失控.因此在垃圾收集过程中, 不仅仅是标记和清除
-
一篇文章带你搞懂Java线程池实现原理
目录 1. 为什么要使用线程池 2. 线程池的使用 3. 线程池核心参数 4. 线程池工作原理 5. 线程池源码剖析 5.1 线程池的属性 5.2 线程池状态 5.3 execute源码 5.4 worker源码 5.5 runWorker源码 1. 为什么要使用线程池 使用线程池通常由以下两个原因: 频繁创建销毁线程需要消耗系统资源,使用线程池可以复用线程. 使用线程池可以更容易管理线程,线程池可以动态管理线程个数.具有阻塞队列.定时周期执行任务.环境隔离等. 2. 线程池的使用 /** *
-
Java设计模式模板方法(Template)原理解析
这篇文章主要介绍了Java设计模式模板方法(Template)原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 前言: 我们在开发中有很多固定的流程,这些流程有很多步凑是固定的,比如JDBC中获取连接,关闭连接这些流程是固定不变的,变动的只有设置参数,解析结果集这些是根据不同的实体对象"来做调整",针对这种拥有固定算法流程,其中有固定的步凑,存在不固定的步凑的情况下就诞生了模板方法模式. 模板方法模式(Template)定义:
随机推荐
- jquery $(document).ready() 与window.onload的区别
- 正则表达式进行页面表单验证功能
- jquery 简单的图片展示效果
- C#类中static变量用法分析
- Javascript调用Webservice的多种方法
- 详解PHP使用日期时间处理器Carbon人性化显示时间
- C#访问PostGreSQL数据库的方法
- PHP和JavaScrip分别获取关联数组的键值示例代码
- php curl常见错误:SSL错误、bool(false)
- PHP中的output_buffering详细介绍
- jquery 多级下拉菜单核心代码
- JavaScript控制两个列表框listbox左右交换数据的方法
- win2003 iis6.0站点打不开,找不到服务器或 DNS 错误(Connections_Refused)
- 在ASP.NET 2.0中操作数据之二十三:基于用户对修改数据进行限制
- Android调用系统默认浏览器访问的方法
- iOS中输入框设置指定字符输入的方法
- python爬虫获取小区经纬度以及结构化地址
- 关于django 1.10 CSRF验证失败的解决方法
- spring-mvc/springboot使用MockMvc对controller进行测试
- 使用spring框架中的组件发送邮件功能说明