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)的更多相关文章

  1. Java线程Thread的状态解析以及状态转换分析 多线程中篇(七)

    线程与操作系统中线程(进程)的概念同根同源,尽管千差万别. 操作系统中有状态以及状态的切换,Java线程中照样也有. State 在Thread类中有内部类 枚举State,用于抽象描述Java线程的 ...

  2. java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍

    (原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...

  3. java 线程Thread 技术--volatile关键字

    java 语言中允许线程访问共享变量,为了保证共享变量能被准确和一致的更新,Java 语言提供了volatile 关键字,也就是我们所说的内存一致性: 问题抛出:(尝试去运行下面代码,以及将volat ...

  4. java 线程Thread 技术--1.5 Future与Callable

    Callable: 从官方文档说起: 通过实现callable 的called 方法可以使一个任务可以返回一个结果以及可能抛出一个异常: callable 与runnable 是相似的,可以被其他线程 ...

  5. java 线程Thread 技术--1.5 Executor Executors,ThreadPool,Queue

    Executors : Executors ,就是一个线程工具类:大部分操作线程的方法,都可以在这个工具类中就行创建,执行,调用一些线程的方法: Executor : 用于执行和提交一个runnabl ...

  6. java 线程Thread 技术--1.5Lock 与condition 演示生产者与消费模式

    在jdk 1.5 后,Java 引入了lock 锁来替代synchronized ,在使用中,lock锁的使用更加灵活,提供了灵活的 api ,不像传统的synchronized ,一旦进入synch ...

  7. java 线程Thread 技术--方法演示生产与消费模式

    利用wait 与notifyAll 方法进行演示生产与消费的模式的演示,我们两个线程负责生产,两个线程消费,只有生产了才能消费: 在effective Java 中有说过: 1. 在Java 中 ,使 ...

  8. java 线程Thread 技术--线程状态与同步问题

    线程技术第三篇: 线程的状态: 1. 创建状态: 当用new 操作符创建一个新的线程对象时,该线程就处于创建状态,系统不为它分配资源 2.可运行状态:当线程调用start 方法将为线程分配必须的系统资 ...

  9. java 线程Thread 技术--线程创建源码解释

    永远不要忘记最基础的东西,只有把最基础的知识打牢靠,才能够使你走的更远,我将从今天开始,进行线程知识的回顾,一些常用知识点,以及java1.5 引入的并发库,进行详细的讲解与总结 创建线程的目的是为了 ...

  10. Java 线程Thread.Sleep详解

    我们可能经常会用到 Thread.Sleep 函数来使线程挂起一段时间.那么你有没有正确的理解这个函数的用法呢? 思考下面这两个问题: 1.假设现在是 2008-4-7 12:00:00.000,如果 ...

随机推荐

  1. redhat7安装

    ------------恢复内容开始------------ 新建虚拟机向导(自定义) 指定虚拟机安装位置,把他放在固态硬盘提升他的运行速度(不推荐,一般将位置定为非系统盘) 选择系统镜像文件 开机选 ...

  2. 基础的linux命令(一)

    我练习使用的 Linux 系统是 CentOS 7 它是通过把 RHEL 系统重新编译并发布给用户免费使用的 Linux 系统. 首先你需要一台Linux虚拟机,如果没有,也没关系,点这里 一.命令格 ...

  3. c++实现单纯形法现行规划问题的求解

    在本程序中默认该现行规划问题有最优解 针对此问题: #include<iostream> using namespace std; int check(float *sigema, int ...

  4. 【深度强化学习】Curriculum-guided Hindsight Experience Replay读后感

    目录 导读 目录 正文 Abstract[摘要] Introduction[介绍] 导读 看任何一个领域的文章,一定要看第一手资料.学习他们的思考方式,论述逻辑,得出一点自己的感悟.因此,通过阅读pa ...

  5. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

  6. Django-on_delete

    一.外键的删除 关于on_delete的总结 1.常见的使用方式(设置为null) class BookModel(models.Model): """ 书籍表 &quo ...

  7. D3属性大全

    https://www.cnblogs.com/bester-ace/articles/10948793.html https://www.cnblogs.com/qingmingsang/artic ...

  8. Java构造方法的姿势与易错点

    <Java基础复习>-类与对象&初始化 关于类和对象的基本理念,就不再赘述(如果你学习过还忘了,就是一种特殊的本领了),没有学习过的可以去搜索一下OOP或者类和对象,百科的知识就已 ...

  9. 是什么是递归?-[all]-[编程理论]

    递归是所有编程语言中,都会讨论到的一个问题. Content Of Table 递归的通俗认识 编程领域的抽象 一个最简单的示例 一点总结 栈溢出问题 本示例的一点拓展说明 ### 递归的通俗认识 编 ...

  10. HDU1087:Super Jumping! Jumping! Jumping!(DP水题)

    Super Jumping! Jumping! Jumping! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 ...