java线程中常用的基本方法有wait,notify,notifyAll,sleep,join,yield等。

线程的生命周期一共分为五个部分,分别是:新建(New)、就绪(Runnable)、运行(Running)、阻塞(Blocked)和死亡(Dead)。由于cpu需要在多条线程中切换因此线程状态也会在多次运行和阻塞之间切换。

线程等待(wait)

调用该方法会使线程会进入WAITING状态,只有等待另外线程的通知或者被中断才会返回,需要注意的是调用wait()方法后,会释放对象的锁,所以,wait方法一般用在同步方法或同步代码块中。wait()是Object中的方法。

线程睡眠(sleep)

调用该方法会使线程休眠,进入TIMED-WATING状态,与wait方法不同的是,sleep不会释放当前对象占用的锁。sleep是线程中的方法。

线程让步(yield)

调用该方法会使当前线程让出CPU执行时间片,与其他线程一起重新竞争CPU时间片。一般情况下,优先级高的线程有更大的可能性能成功竞争到CPU时间片,但这又不是绝对的,有的操作系统对优先级并不敏感。yield不会释放当前对象占用的锁。

线程中断(interrupt)

调用该方法会中断此线程,其本意是给这个线程一个通知信号,会影响这个线程内部的一个中断标识位,可以通过isInterrupted()方法获取。这个线程本身并不会因此而改变状态。

1. 调用interrupt()方法并不会中断一个正在运行的线程。也就是说处于Running状态的线程并不会因为被中断而被终止,仅仅改变了内部维护的中断标识位而已。

2. 若调用sleep()而使线程处于TIMED-WATING状态,这时调用interrupt()方法,会抛出InterruptedException,从而使线程提前结束TIMED-WATING状态。

3. 许多声明抛出InterruptedException的方法(如Thread.sleep(long mills方法)),抛出异常前,都会清除中断标识位,所以抛出异常后,调用isInterrupted()方法将会返回false。

4. 中断状态是线程固有的一个标识位,可以通过此标识位安全的终止线程。比如,你想终止一个线程thread的时候,可以调用thread.interrupt()方法,在线程的run方法内部可以根据thread.isInterrupted()的值来优雅的终止线程。

等待其他线程终止(Join)

join()方法,等待其他线程结束。在当前线程中调用一个线程的join()方法,则当前线程转为阻塞状态,等待另一个线程结束,当前线程再由阻塞状态变为就绪状态,等待CPU的宠幸。比如在main()方法中启动了另一个子线程a,正常的流程是两个线程同时进行,如果调用了a.join(),那么main()方法会等a线程运行结束后,才会继续进行后面的代码。

线程唤醒(notify)

调用此方法会唤醒等待线程,如果有多个线程都在此对象上等待,则会唤醒其中的一个,选择是任意的,是和wait()方法搭配使用的。线程通过调用其中一个 wait() 方法,在对象的监视器上等待,直到当前的线程放弃此对象上的锁定,才能继续执行被唤醒的线程,被唤醒的线程将以常规方式与在该对象上主动同步的其他所有线程进行竞争。notify() 也是Object 类中的方法 。

线程唤醒的方法还有 notifyAll() ,唤醒监视器上等待的所有线程。


线程方法总结

1. sleep():强迫一个线程睡眠N毫秒。

2. isAlive(): 判断一个线程是否存活。

3. join(): 等待线程终止。

4. activeCount(): 程序中活跃的线程数。

5. enumerate(): 枚举程序中的线程。

6. currentThread(): 得到当前线程。

7. isDaemon(): 一个线程是否为守护线程。

8. setDaemon(): 设置一个线程为守护线程。(用户线程和守护线程的区别在于,是否等待主线程依赖于主线程结束而结束)

9. setName(): 为线程设置一个名称。

10. wait(): 强迫一个线程等待。

11. notify(): 通知一个线程继续运行。

12. setPriority(): 设置一个线程的优先级。

13. getPriority()::获得一个线程的优先级。

java线程相关基本方法的更多相关文章

  1. java线程相关

    java线程相关 java 线程 1 线程的状态 This is an example of UML protocol state machine diagram showing thread sta ...

  2. Java线程相关的热门面试题

    ---恢复内容开始--- 下面是Java线程相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序 ...

  3. Java线程同步的方法

    如果向一个变量写值,而这个变量接下来可能会被另一个线程所读取,或者从一个变量读值,而它的值可能是前面由另一个线程写入的,此时就必须使用同步. sychronized Java语言的关键字,当它用来修饰 ...

  4. java线程的interrupt方法

    java现成的interrupt方法比较容易误导新手,它其实是不会中断(停止)当前的线程,只是标志一下当前线程的某个状态值(中断标志位),并且这个状态为只对阻塞方法(比如说:             ...

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

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

  6. Java线程停止interrupt()方法

    程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误.在本篇文章中,我们针对这些难题之一:如何中断一个正在运行的线程. 中 ...

  7. Java线程的sleep方法

    sleep方法的签名: public static void sleep (long millis) sleep方法是Thread类的一个方法,作用是:在指定的毫秒内让正在执行的线程休眠(暂停执行) ...

  8. java#lambda相关之方法引用

    lambda在java中通常是()->{}这样的方式,来书写的.通常的lambda是四大函数型接口的一个“实现”. 如果我们要写的lambda已经有现成的实现了,那么就可以把现成的实现拿过来使用 ...

  9. 并发编程(六)Object类中线程相关的方法详解

    一.notify() 作用:唤醒一个正在等待该线程的锁的线程 PS : 唤醒的线程不会立即执行,它会与其他线程一起,争夺资源 /** * Object类的notify()和notifyAll()方法详 ...

随机推荐

  1. 使用react-tooltip实现鼠标悬浮显示框详细记录

    前段时间遇到的一个需求,要求鼠标悬停显示使用描述, 用到了react-tooltip插件,今天写一个总结 先看效果(为了方便参考,用的是原始样式): 文档参考地址: https://www.npmjs ...

  2. fastclick使用与 fastclick ios11.3相关bug原因(ios输入框点击变得不灵敏,ios input失焦后,页面上移,点击不了)

    FastClick 移动设备上的浏览器默认会在用户点击屏幕大约延迟300毫秒后才会触发点击事件,这是为了检查用户是否在做双击.为了能够立即响应用户的点击事件,就有了FastClick. 安装fastc ...

  3. 基于jquery读取input上传的文件内容

    <script src="/static/js/jquery.js"></script> // 前端页面实现头像预览 // 当用户选中文件之后,也就是头像的 ...

  4. 利用谓词实现List<>的Find等高级操作

    public class Person        {            public int Id { get; set; }            public string Name { ...

  5. Mule ESB 自带例子hello初体验

    1 配置的流的效果图 2 应用配置文件hello.xml内容 <?xml version="1.0" encoding="UTF-8"?> < ...

  6. laravel 常用文档

    [ Laravel 5.6 文档 ] 快速入门 —— 目录结构  laravel学院 http://laravelacademy.org/post/8657.html Laravel 的缓存系统    ...

  7. THINKPHP框架的优秀开源系统推荐

    THINKPHP框架的优秀开源系统推荐 众所周知,国内众多优秀的开源框架,ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性.并且拥有众多的原创功能 ...

  8. H3C 用三层交换机实现VLAN间路由

  9. win10 uwp 发布旁加载自动更新

    在很多企业使用的程序都是不能通过微软商店发布,原因很多,其中我之前的团队开发了很久的应用,结果发现没有用户能从微软应用商店下载所以我对应用商店没有好感.但是作为一个微软粉丝,怎么能不支持 UWP 开发 ...

  10. HDU 3974 Assign the task

    Assign the task Problem Description There is a company that has N employees(numbered from 1 to N),ev ...