Java多线程与并发控制
三、线程的几种状态
在Java当中,线程通常都有五种状态,创建、就绪、运行、阻塞和死亡。
第一是创建状态。在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态。
第二是就绪状态。当调用了线程对象的start方法之后,该线程就进入了就绪状态,但是此时线程调度程序还没有把该线程设置为当前线程,此时处于就绪状态。在线程运行之后,从等待或者睡眠中回来之后,也会处于就绪状态。
第三是运行状态。线程调度程序将处于就绪状态的线程设置为当前线程,此时线程就进入了运行状态,开始运行run函数当中的代码。
第四是阻塞状态。线程正在运行的时候,被暂停,通常是为了等待某个时间的发生(比如说某项资源就绪)之后再继续运行。sleep,suspend,wait(两者的区别是是否释放锁)等方法都可以导致线程阻塞。
第五是死亡状态。如果一个线程的run方法执行结束或者调用stop方法后,该线程就会死亡。对于已经死亡的线程,无法再使用start方法令其进入就绪
public static int setName(String name){
synchronized(Xxx.class){
Xxx.name = name;
}
}
6)、线程睡眠时,它所持的任何锁都不会释放。
synchronized (this) {
x = x - y;
}
return x;
}
return x++;
}
synchronized (this) {
return x;
}
}
JAVA的多线程是抢占式(preemptive)的,意思是调度机制会为每个线程提供时间片,并且通过强制中断来转换到下一个线程。抢占式的实现方式对线程的个数有一个限制。与其相对的是协作式(cooperative)的,协作式的多任务系统对任务的数量是没有限制的,因为任务是自动让出资源的,并且上下文的转换成本较小。
线程中断(Interruption):
线程有以下几种状态:初始态(New), 可运行(Runnable), 阻塞(Blocked), 终止(Dead)。线程被创建的即刻为初始态,系统为线程分配必要的资源,所有的资源就位后,万事具备,只欠东风,此刻进入可运行状态,调度器可随时使线程运行或继续等待(Blocked);
处于阻塞状态的线程不能获得CPU 时间,以下事件可以使一个线程进入阻塞状态:
a) 调用了sleep() 方法(jion()方法等同)
b) 调用了wait() 方法
c) 等待同步锁,比如进入synchronized 方法
d) 等待 I/O
所谓中断是指CPU终止当前运行的任务,使其让出资源让其他任务操作。java多线程中通常情况下所说的中断,就是从线程的run() 方法跳出来. 当然最直接的方法就是等待 run()方法执行完毕自动退出。但是多数情况下我们的线程都是长任务线程,比如守护线程(伺服线程),需要长时间不间断运行。一种可选方法是通过控制变量(这个控制变量,通常是全局变量,以便程序在任何时候任何地点都可以访问到,并且对控制变量的操作应当是同步的,在java中我们可以选择使用volatile 变量)。
转载于:https://www.cnblogs.com/csxf/p/3672674.html
Java多线程与并发控制相关推荐
- 实现 Java 多线程并发控制框架
2006 年 8 月 14 日 Java 提供了语言级别的线程支持,所以在 Java 中使用多线程相对于 C,C++ 来说更简单便捷,但本文并不是介绍如何在 Java 中使用多线程来来解决诸如 Web ...
- java 线程管理框架_实现 Java 多线程并发控制框架
所面临的问题 图 1. 线程场景 这幅图中节点代表一个 single Thread,边代表执行的步骤. 整幅图代表的意思是,ROOT 线程执行完毕后执行 T1 线程,T1 执行完毕后并发的执行 T2 ...
- java多线程并发控制_Java多线程与并发控制
三.线程的几种状态 在Java当中,线程通常都有五种状态,创建.就绪.运行.阻塞和死亡. 第一是创建状态.在生成线程对象,并没有调用该对象的start方法,这是线程处于创建状态. 第二是就绪状态.当调 ...
- java多线程的同步控制_Java多线程并发控制工具信号量Semaphore,实现原理及案例...
信号量(Semaphore)是Java多线程兵法中的一种JDK内置同步器,通过它可以实现多线程对公共资源的并发访问控制.一个线程在进入公共资源时需要先获取一个许可,如果获取不到许可则要等待其它线程释放 ...
- Java多线程并发控制工具CountDownLatch,实现原理及案例
跟着作者的65节课彻底搞懂Java并发原理专栏,一步步彻底搞懂Java并发原理. 作者简介:笔名seaboat,擅长工程算法.人工智能算法.自然语言处理.架构.分布式.高并发.大数据和搜索引擎等方面的 ...
- JAVA多线程和并发基础面试问答
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在 ...
- ***JAVA多线程和并发基础面试问答
多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题.(校对注:非常赞同这个观 ...
- 面试问到java并发_那些面试官必问的JAVA多线程和并发面试题及回答
Java多线程面试问题 1. 进程和线程之间有什么不同? 一个进程是一个独立(self contained)的运行环境,它可以被看作一个程序或者一个应用.而线程是在进程中执行的一个任务.Java运行环 ...
- java 多线程并发 问题_JAVA多线程和并发基础面试问答
原文链接 译文连接作者:Pankaj 译者:郑旭东 校对:方腾飞 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一.在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌 ...
最新文章
- scanf函数与scanf_s函数
- 【转】常用数据结构及复杂度
- Codeforces Round #546 (Div. 2) B. Nastya Is Playing Computer Games
- mysql兼容性高吗_MySQL与标准的兼容性
- mysql 卸载插件_MySQL 插件安装或卸载(window validate_password 为例)
- JDK源码分析(2)LinkedList
- C和指针---读书笔记9
- layui option 动态添加_layui select如何动态添加option
- android设置闹钟日期,在Android中将闹钟设置为特定日期和时间
- 我的ubuntu系统配置-重装到完整配置ubuntu环境-完整配置ubuntu-ubuntu-install-final
- 推荐几个好用的临时邮箱生成工具网站
- python translate 中文_Python translate()方法
- Delphi下实现全屏快速找图找色 四、BitmapData.pas的使用
- JS中各种width和height的区别
- 华为面试题: 杨辉三角形的变形
- whistle-安卓手机配置代理
- 计算机技术在企业管理中的应用浅论,浅谈计算机技术在现代企业管理中的应用...
- 编写一个shell脚本,使其能够备份/etc目录下所有文件,并且备份的文件名需要自动生成日期,即产生后缀名形如.backup_20210624的文件。
- ElasticSearch自定义分析器(custom analyzer)
- Oracle数据库还原dmp文件 (不积跬步,无以至千里)
热门文章
- InvokeHelper:多线程修改主界面控件属性并调用其中方法
- iOS开发HTTPS实现之信任SSL证书和自签名证书
- SQL server Cannot find one or more
- Apple Mac OS X每日一技巧026:Spotlight打开文件所在的文件夹
- android LinkedList的基本用法
- latex的资料ftp
- PHP 从数组对象中取出数组提示:Undefined property: stdClass::$subject
- 使用tf.keras搭建mnist手写数字识别网络
- 随时更新———个人喜欢的关于模式识别、机器学习、推荐系统、图像特征、深度学习、数值计算、目标跟踪等方面个人主页及博客
- JVM—垃圾回收与算法