线程常见的几种方法

标签(空格分隔): 多线程


Thread静态方法

1. Thread.sleep(misseconeds)

睡眠:当前线程暂停一段时间让给别的线程去运行。Sleep复活时间,根据你传入的睡眠时间而定,等到睡眠到规定的时间后,线程自动复活,它不会释放锁资源。

2. Thread.yield()

让当前正在执行线程停下来一下,把执行机会让给别的在等待的线程,自己回到等待的就绪队列里面,自己也有可能会运行到,但更大的机会是让别的等待线程运行,相当于将自己的优先级暂时降低一下,把机会让给别人一会儿。

Thread实例方法

1. start方法

线程创建以后,并不会自动运行,需要我们手动的start,将线程的状态设为就绪状态,但不一定马上就被运行,得等到CPU分配时间片以后,才会运行。

2. join方法

join方法,意思就是在自己当前线程加入你调用的线程,本线程则等待,当调用Joni的线程运行完了后,自己再去运行,t1和t2两个线程,如果在t1线程里面调用了t2.join(),则t1线程会进行等待状态,t2运行结束以后,才会继续运行t1。这样可以保证线程的先后顺序。

3. wait方法(wait notify notifyAll都必须在持有有锁的代码中)

wait()是使当前线程阻塞,前提是必须先获得锁,一般配合到synchronized来使用,即,一般在synchronized 同步代码块里使用 wait()、notify/notifyAll() 方法,wait方法由当前所有的local对象里面调用,this.wait(),必须被try catch包围,保证即使异常中断也可以使wait等待的线程唤醒。执行了wait方法,需要被别的线程通过同一个对象的notify方法唤醒。

4. notify notifyAll

只有当 notify/notifyAll() 被执行时候,才会唤醒一个或多个正处于等待状态的线程,然后继续往下执行,直到执行完synchronized 代码块的代码或是中途遇到wait() ,再次释放锁。也就是说,notify/notifyAll()的执行只是唤醒沉睡的线程,而不会立即释放锁,锁的释放要看代码块的具体执行情况。所以在编程中,尽量在使用了notify/notifyAll() 后立即退出临界区,以唤醒其他线程让其获得锁

notify 与 notifyAll区别

notify方法只唤醒一个等待(对象的)线程并使该线程开始执行。所以如果有多个线程等待一个对象,这个方法只会唤醒其中一个线程,选择哪个线程取决于操作系统对多线程管理的实现。notifyAll 会唤醒所有等待(对象的)线程,尽管哪一个线程将会第一个处理取决于操作系统的实现。如果当前情况下有多个线程需要被唤醒,推荐使用notifyAll方法。比如在生产者-消费者里面的使用,每次都需要唤醒所有的消费者或是生产者,以判断程序是否可以继续往下执行。

5. yeild(不会释放锁资源,而让当前线程从运行状态回到就绪状态)

调用yield方法会让当前线程交出CPU权限,让CPU去执行其他的线程。它跟sleep方法类似,同样不会释放锁

但是yield不能立刻交出CPU,会出现同一个线程一直执行的情况,另外,yield方法只能让拥有相同优先级的线程有获取CPU执行时间的机会。

注意调用yield方法并不会让线程进入阻塞状态,而是让线程重回就绪状态,它只需要等待重新获取CPU执行时间,这一点是和sleep方法不一样的

java线程常见的几种方法的更多相关文章

  1. Java 延时常见的几种方法

    1. 用Thread就不会iu无法终止 new Thread(new Runnable() { public void run() { while (true) { test(); try { Thr ...

  2. Java 获取*.properties配置文件中的内容 ,常见的两种方法

    import java.io.InputStream; import java.util.Enumeration; import java.util.List; import java.util.Pr ...

  3. Java中常见的5种WEB服务器介绍

    这篇文章主要介绍了Java中常见的5种WEB服务器介绍,它们分别是Tomcat.Resin.JBoss.WebSphere.WebLogic,需要的朋友可以参考下 Web服务器是运行及发布Web应用的 ...

  4. java实现定时任务的三种方法 - 转载

    java实现定时任务的三种方法 /** * 普通thread * 这是最常见的,创建一个thread,然后让它在while循环里一直运行着, * 通过sleep方法来达到定时任务的效果.这样可以快速简 ...

  5. Python中执行系统命令常见的几种方法--转载

    Python中执行系统命令常见的几种方法 Python中执行系统命令常见的几种方法有: (1)os.system # 仅仅在一个子终端运行系统命令,而不能获取命令执行后的返回信息 # 如果再命令行下执 ...

  6. Linux下查看线程数的几种方法汇总

    Linux下查看线程数的几种方法汇总 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Linux下查看某个进程的线程数量 pstree命令以树状图显示进程间的关系(display ...

  7. Java线程创建的两种方式

    java多线程总结一:线程的两种创建方式及优劣比较 (一)---之创建线程的两种方式 java实现多线程的两种方法的比较

  8. java线程池和五种常用线程池的策略使用与解析

    java线程池和五种常用线程池策略使用与解析 一.线程池 关于为什么要使用线程池久不赘述了,首先看一下java中作为线程池Executor底层实现类的ThredPoolExecutor的构造函数 pu ...

  9. JAVA实现单例模式的四种方法和一些特点

    JAVA实现单例模式的四种方法和一些特点,需要的朋友可以参考一下     一.饿汉式单例类 复制代码 代码如下: public class Singleton  {      private Sing ...

  10. Java线程同步的四种方式详解(建议收藏)

    ​ Java线程同步属于Java多线程与并发编程的核心点,需要重点掌握,下面我就来详解Java线程同步的4种主要的实现方式@mikechen 目录 什么是线程同步 线程同步的几种方式 1.使用sync ...

随机推荐

  1. dotnet SemanticKernel 入门 开篇

    本文将开坑告诉大家什么是 SemanticKernel 以及如何使用框架 众所周知 GPT 是一个大语言模型,能够参与的输入和输出是文本内容.而想要让 GPT 完成各项功能,则需要对接现有的编程世界. ...

  2. dotnet C# 根据椭圆长度和宽度和旋转角计算出椭圆中心点的方法

    本文来告诉大家如何根据椭圆长度和宽度和旋转角计算出椭圆中心点的方法 方法很简单,请看代码 /// <summary> /// 辅助进行椭圆点计算的类 /// </summary> ...

  3. k8s管理应用

  4. Fastbin attack&&Double free和Unsortbin leak的综合使用

    Fastbin attack&&Double free和Unsortbin leak的综合使用 今天做一个综合题目,包括利用Fastbin attack实现多指针指向一个地址,以及利用 ...

  5. 函数编程:强大的 Stream API

    函数编程:强大的 Stream API 每博一文案 只要有人的地方,世界就不会是冰冷的,我们可以平凡,但绝对不可以平庸. ------ <平凡的世界> 人活着,就得随时准备经受磨难.他已经 ...

  6. VMware Workstation Pro各版本下载链接汇总(特全!!!)

    VMware Workstation Pro各版本下载链接汇总 (10.11.12.14.15.16官网全版本) 整理不易,点赞关注一下吧 工具软件:VMware Workstation Pro 1. ...

  7. MacOS M1芯片openmp库出现mach-o file, but is an incompatible architecture (have ‘arm64‘, need ‘x86_64‘问题解决

    目录 1. 问题描述 2. 问题出现原因 3. 解决方案 编译安装 使用Homebrew安装 Reference 1. 问题描述 报错如下所示: ImportError: dlopen(/Users/ ...

  8. windows10安装ruby

    下载ruby 下载地址: ruby各版本下载地址 https://rubyinstaller.org/downloads/ 2.3.3版本 https://www.cr173.com/soft/142 ...

  9. java的jdbc插入的时候,遇到null情况报错问题

    分析原因: 在执行SQL时MyBatis会自动通过对象中的属性给SQL中参数赋值,它会自动将Java类型转换成数据库的类型.而一旦传入的是null它就无法准确判断这个类型应该是什么,就有可能将类型转换 ...

  10. angular自定义验证器实现所遇到的问题

    1:返回值问题 校验器 2:返回值类型 3:创建自定义指令配置注意 1:校验器 回过头来看一下表单校验的校验器.校验器共有两种,同步校验和异步校验,验证器函数接受一个control,然后返回一组错误对 ...