JAVA—线程(Thread)
1.线程的状态有哪些
我记得在操作系统原理的书上有一张具体的图,暂时找不到书...
new:新建状态,被创建出来后未启动时的线程状态。
runnable:就绪状态,表示可以运行。
blocked:阻塞状态表示正在等待执行synchronized代码块或者方法。
waiting:等待状态,指一个处于等待状态的线程正在等待另一个线程执行某个特定动作。
timed_waiting:计时等待状态,比等待状态多了个超时时间。
terminated:终止状态,线程已经执行完成。
2.阻塞和等待状态的区别
阻塞状态可以理解为线程还处于活跃状态,不过在等待其他线程使用完某个锁资源,而等待状态是自身调用了wait()或者join()之类的函数,只能等待其他线程执行某个特定的动作才能被继续唤醒。
3.start()和run()的区别
start()属于Thread自身的方法,并且用了synchronized关键字来保证线程安全。而run()为Runnable接口的抽象方法,必须重写。从执行效果来说,start()可以启动多个线程,而run()只是一个普通的方法。还有就是start()不能被多次调用,而run()可以。
4.线程优先级
线程的优先级可以理解为优先使用cpu时间片的概率,但不能保证高优先级线程一定先执行。在程序中我们可以通过Thread.setPrioity()设置优先级。
5.线程的其他常用方法
(1)join() 使当前线程的执行权让给别的线程,直到那个线程执行完成或者超过超时时间。
(2)yield() 给线程调度器一个当前线程愿意让出cpu使用权的信号,但是线程调度器不一定管。也就是有时候会让,有时候不让,不稳定。
6.sleep()和yield方法的区别
(1)sleep使当前线程暂停指定时间,让出cpu使用权并且不考虑优先级,不释放锁同步锁,如果有synchronized关键字的同步块,别的线程还是不能访问。yield只会让位给优先级高于等于它的线程,不能指定时间,不能保证让出使用权,yield方法也不会释放同步锁。
(2)线程在执行sleep之后进入睡眠状态,而执行yield后进入就绪状态。
(3)sleep方法需要trycatch来抛出异常,yield不需要
JAVA—线程(Thread)的更多相关文章
- Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)
线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...
- java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
(原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...
- java 线程Thread 技术--volatile关键字
java 语言中允许线程访问共享变量,为了保证共享变量能被准确和一致的更新,Java 语言提供了volatile 关键字,也就是我们所说的内存一致性: 问题抛出:(尝试去运行下面代码,以及将volat ...
- java 线程Thread 技术--1.5 Future与Callable
Callable: 从官方文档说起: 通过实现callable 的called 方法可以使一个任务可以返回一个结果以及可能抛出一个异常: callable 与runnable 是相似的,可以被其他线程 ...
- java 线程Thread 技术--1.5 Executor Executors,ThreadPool,Queue
Executors : Executors ,就是一个线程工具类:大部分操作线程的方法,都可以在这个工具类中就行创建,执行,调用一些线程的方法: Executor : 用于执行和提交一个runnabl ...
- java 线程Thread 技术--1.5Lock 与condition 演示生产者与消费模式
在jdk 1.5 后,Java 引入了lock 锁来替代synchronized ,在使用中,lock锁的使用更加灵活,提供了灵活的 api ,不像传统的synchronized ,一旦进入synch ...
- java 线程Thread 技术--方法演示生产与消费模式
利用wait 与notifyAll 方法进行演示生产与消费的模式的演示,我们两个线程负责生产,两个线程消费,只有生产了才能消费: 在effective Java 中有说过: 1. 在Java 中 ,使 ...
- java 线程Thread 技术--线程状态与同步问题
线程技术第三篇: 线程的状态: 1. 创建状态: 当用new 操作符创建一个新的线程对象时,该线程就处于创建状态,系统不为它分配资源 2.可运行状态:当线程调用start 方法将为线程分配必须的系统资 ...
- java 线程Thread 技术--线程创建源码解释
永远不要忘记最基础的东西,只有把最基础的知识打牢靠,才能够使你走的更远,我将从今天开始,进行线程知识的回顾,一些常用知识点,以及java1.5 引入的并发库,进行详细的讲解与总结 创建线程的目的是为了 ...
- Java 线程Thread.Sleep详解
我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果 ...
随机推荐
- 基于 websocket 的多端桥接平台
我们现在的业务是基于新闻客户端实现的,都要经过新闻客户端的环境,进行前后端数据上的交互.但是我们在调试过程中,非常的不方便. 通常使用的工具有:modheader, postman, fiddler ...
- jwt token认证
目录 1.drf-jwt手动签发与校验 2.drf小组件:过滤.筛选.排序.分页 => 针对与群查接口 jwt_token源码分析(入口) 签发token源码分析 校验token源码分析 url ...
- Selenium系列(五) - 键盘操作详细解读
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- jupyter之配置自己喜欢的python环境
之前安装anaconda,会自动安装jupyer笔记本,但是本人从来没有用过,近期查看github上的一些教程时,发现很多文件都是.ipynb为后缀的jupyter文件,于是自己准备琢磨一下把环境换成 ...
- 聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的?
本周我们的讨论话题是关于Selenium自动化: 话题:聊聊用Selenium做自动化碰到了哪些坑?都是怎么解决的? 话题描述:Selenium是大家做UI自动化用到的主流框架,在平时写脚本的过程中, ...
- excel导出功能
/* * 导出 add by faby on 20180918 */ public void export(){ HttpServletResponse response=ServletAct ...
- 二、【Docker笔记】Docker的核心概念及安装
Docker主要有三大核心的概念,分别为镜像(Image).容器(Container)及仓库(Repository). 一.核心概念 1.Docker镜像 Docker镜像其实与虚拟机镜像很类似, ...
- 详谈XSS防御方法
1.HttpOnly 严格的说,httponly并非为了对抗XSS,它解决的是XSS后的Cookie劫持攻击.Cookie设置了httponly之后,JavaScript读不到该cookie的值. ...
- linux 之虚拟机的安装与介绍
linux 零基础入门1.1linux介绍 操作系统用途: 管理硬件 驱动硬件 管理软件 分配资源1.2 linux的发展unix -> windows ->linuxlinux 免费 开 ...
- python学习之由
2019python之年: 2019是个挫折之年,但又是幸运之年,这一年创业遭遇滑铁卢,几与破产,充满着迷茫,路在何方?? 开始接触python是在微信朋友圈,结缘于广告,觉得很有意思,但一直没有深入 ...