睡觉(sleep)和在java中等待(wait in java)的区别

Sleep和wait是Java中用于多线程处理的两种方法。sleep方法属于Thread类,而wait方法来自Object类。Java中sleep和wait的关键区别在于,sleep用于在指定的毫秒数内暂停当前线程的执行,而wait方法用于使当前线程等待,直到另一个线程调用对象的notify或notifyAll方法。...

关键区别——java中的休眠与等待

Sleep和wait是Java中用于多线程处理的两种方法。sleep方法属于Thread类,而wait方法来自Object类。Java中sleep和wait的关键区别在于,sleep用于在指定的毫秒数内暂停当前线程的执行,而wait方法用于使当前线程等待,直到另一个线程调用对象的notify或notifyAll方法。

线程是操作系统中最小的处理单元。它是一个程序中的单一顺序控制流。线程是轻量级的。多线程是同时运行多个线程的机制。Java等编程语言支持多线程。多线程处理有很多优点,因为它允许同时运行多个线程,并且线程之间相互独立。Java中有一些方法可以用于多线程处理。他们中的两个正在睡觉等待。

目录

1. 概述和主要区别
2. 什么是Java睡眠
3. Java中的等待是什么
4. Java中sleep和wait的相似性
5. 并排比较——在Java中以表格形式显示sleep和wait
6. 摘要

什么是在爪哇睡觉(sleep in java)?

操作系统中运行多个进程。进程是正在执行的程序。每个进程可以有多个线程,并且在这些线程之间发生上下文切换。在Java中,有两种创建线程的方法。这是通过扩展thread类或实现可运行接口来实现的。Thread类具有用于在线程上创建和执行操作的构造函数和方法。Thread类扩展对象类并实现可运行接口。可运行接口应该由任何一个类实现,这些类的实例将由线程执行。当线程执行时,应该执行的代码写在run方法中。应该运行的线程由线程调度程序选择。在一个进程中只有一个线程运行。

一条线要经过几个阶段。在创建了Thread类的对象之后,程序员可以调用start方法。在调用该方法之前,线程被称为处于新状态。线程调度程序选择要运行的线程。如果线程调度程序尚未选择线程,但调用了start方法,则线程处于可运行状态。在线程调度程序选择要执行的线程之后,它将转换到运行状态。如果线程是活动的,但当前没有资格运行,则它处于不可运行或阻塞状态。方法完成后,转到线程结束状态。这些是线程生命周期的主要阶段。

thread类中有多种方法可用于执行不同的任务。睡眠方法用于使该方法睡眠一段特定的时间。sleep方法的语法是public void sleep(long millises)throws InterruptedException。它使当前正在执行的线程在指定的毫秒数内临时停止执行。如果当前线程的当前状态被清除,则抛出另一个线程的当前状态。

睡觉(sleep)和在java中等待(wait in java)的区别

图01:sleep方法的Java程序

根据上面的程序,run方法包含应该执行的代码。在主程序中,将创建ExampleThread1的两个对象,并对它们调用start方法。这将允许在run方法内运行代码。一次只能执行一个线程。用线。休眠(1000);将允许第一个线程终止执行1000毫秒。当一个线程处于休眠状态时,线程调度程序将启动另一个线程。

什么是在java中等待(wait in java)?

多个线程可能访问一个共享资源。它会导致产生错误的输出。线程同步只能用于使一个线程访问共享资源。假设如下情况。如果有两个线程t1和t2,则t1开始将值保存到名为Text1.txt的文本文件中。当t1返回时,这些值将用于其他计算。如果t2在t1返回之前开始,t2可以更改t1保存的值。这可能导致t1提供错误的输出。在同步的帮助下,当t1开始使用Text1.txt文件时,该文件可以被锁定,因此只有t1可以访问它。t2无法更改它,直到t1释放了访问该文本文件的锁。任务完成后,t1可以释放锁。锁也被称为监视器。

线程同步可以通过线程间的通信来实现。关键部分是访问共享资源的代码段。在线程间通信中,一个线程在其临界区暂停运行,另一个线程允许进入同一个临界区执行。它是使用wait、notify和notifyAll方法实现的。它们属于对象类。wait方法用于允许当前线程释放锁,并等待另一个线程调用对象的notify或notifyAll方法。notify方法用于唤醒等待锁的单个线程。所有等待唤醒的线程都是notify锁。

睡觉(sleep)和在java中等待(wait in java)的区别

图02:计算器类

 

睡觉(sleep)和在java中等待(wait in java)的区别

图03:主要方法

Calculator类扩展了线程。synchronized块在run方法内。for循环和notify方法在synchronized块内。在main方法中,创建一个线程的实例,并对该实例调用start方法。main方法将等待线程发出通知。在执行程序时,main方法一直等到run方法的整个执行过程,然后等待notify方法。调用notify方法后,main方法停止等待并开始执行其余代码。Main正在等待计算器线程完成。最后,输出求和结果。

如果其他线程没有完成,那么它将在等待另一个线程,因为它没有完成下面的一个输出。

计算器t1=新计算器();

t1。启动();

System.out.println(t1.总和);

什么是java中sleep与wait的相似性(the similarity between sleep and wait in java)?

  • sleep和wait都是在Java中实现多线程时可以使用的方法

睡觉(sleep)和在java中等待(wait in java)的区别

Java中的睡眠与等待
sleep方法使当前线程暂停执行指定的毫秒数,这取决于系统计时器和调度程序的精度和准确性。 wait方法使当前线程等待,直到另一个线程调用对象的notify或notifyAll方法。
与锁关联
sleep方法不会在同步期间释放对象的锁。 wait方法在同步期间释放锁。
执行方法
sleep方法在当前线程上执行。 对对象调用wait方法。
关联类
sleep是线程类的一种方法。 wait是对象类的一种方法。
完成
睡眠过程在指定的时间量结束后完成。 wait方法被调用notify或notifyAll方法中断。

总结 - 睡觉(sleep) vs. 在java中等待(wait in java)

操作系统上运行多个进程。每个进程可以有多个线程。线程是操作系统中最小的处理单元。Java编程语言支持多线程。它允许同时运行多个线程。sleep和wait是实现多线程时可以使用的两种方法。Java中sleep和wait的区别在于,sleep用于在指定的毫秒数内暂停当前线程的执行,而wait方法用于使当前线程等待,直到另一个线程调用对象的notify或notifyAll方法。

引用

  • 发表于 2020-10-19 03:04
  • 阅读 ( 271 )
  • 分类:IT

你可能感兴趣的文章

扔(throw)和抛出java(throws in java)的区别

关键区别——java中的throw与throws 编程时可能会出错。程序中的错误会产生意外的结果,也可能会终止程序的执行。因此,正确地检测和管理错误,才能正确地执行程序。错误可以有两种类型。它们是编译时错误和运行时错误...

  • 发布于 2020-09-21 19:02
  • 阅读 ( 353 )

包裹(package)和java接口(interface in java)的区别

Java中的Package和Interface的主要区别在于,Package有助于对类进行有条理的分类以方便访问和维护,而Interface则有助于实现多个继承和实现抽象。 Java是最流行的编程语言之一。Java的主要优点是它支持面向对象编程。这种方法允...

  • 发布于 2020-10-18 11:01
  • 阅读 ( 569 )

打破(break)和在java中继续(continue in java)的区别

... Java中的break和continue都用于更改循环的执行。 打破(break)和在java中继续(continue in java)的区别 Java中的break vs continue break是一种循环控制结构,它使循环终止并将程序控制传递给循环的下一个语句。 continue是一个循环控...

  • 发布于 2020-10-19 05:44
  • 阅读 ( 210 )

静止的(static)和java期末考试(final in java)的区别

关键区别——java中的静态与最终版本 每种编程语言都有特定的语法。程序员在编写程序时应该遵循这些语法。程序设计语言的关键字根据任务的不同具有特定的含义。它们由编程语言提供,不能用于用户定义的变量、方法、...

  • 发布于 2020-10-19 07:48
  • 阅读 ( 315 )

选中的(checked)和java中的未检查异常(unchecked exception in java)的区别

关键区别——java中的检查异常与未检查异常 异常是运行时错误。有两种类型的异常称为检查异常和未检查异常。当发生选中的异常时,Java应用程序连接到外部资源,如文件、设备或数据库。这些异常由编译器检查。检查的...

  • 发布于 2020-10-19 08:38
  • 阅读 ( 278 )

变量(variables)和java中的数据字面值(data literals in java)的区别

关键区别——java中的变量与数据文本 计算机程序是执行一项任务的一组指令。编程时需要存储数据。因此,这些数据被存储在存储器中。这些保留的内存位置称为变量。变量应该有唯一的名称,因为它们应该易于识别以执行...

  • 发布于 2020-10-19 08:52
  • 阅读 ( 257 )

最终决赛(final finally)和用java完成(finalize in java)的区别

关键区别–java中的final vs finally vs finalize final、finally和finalize是Java编程中常用的术语。期末考试是一个关键词。它可以用于变量、方法或类。声明为final的变量只能初始化一次。他们不能改变。由于Java是一种支持面向对象编...

  • 发布于 2020-10-19 15:24
  • 阅读 ( 237 )

超载(overloading)和在java中重写(overriding in java)的区别

...为后期绑定、动态绑定、运行时多态性。 超载(overloading)和在java中重写(overriding in java)的共同点 两者都是多态性的类型。 在重载和重写中,方法具有相同的名称。 超载(overloading)和在java中重写(overriding in java)的区别 J...

  • 发布于 2020-10-19 21:20
  • 阅读 ( 362 )

聚合(aggregation)和java中的合成(composition in java)的区别

聚合(aggregation)和java中的合成(composition in java)的区别 聚合是描述“has-a”关系的两个对象之间的关联。组合是一种更具体的聚合类型,它意味着所有权。Java中聚合和组合的关键区别在于,如果包含的对象可以在没有拥有对象...

  • 发布于 2020-10-24 01:38
  • 阅读 ( 719 )

继承(inheritance)和java接口(interface in java)的区别

继承(inheritance)和java接口(interface in java)的区别 Java是Sun Microsystems公司开发的一种编程语言。Java可以用来开发各种应用程序。它是一种支持面向对象、结构化等多种范式的语言,Java的主要优点是支持面向对象编程(OOP)。程序...

  • 发布于 2020-10-25 00:02
  • 阅读 ( 491 )
dws30epdl
dws30epdl

0 篇文章

相关推荐