首页 > 编程知识 正文

python循环优化,python同步和异步的区别

时间:2023-05-03 20:13:19 阅读:146034 作者:2533

在JAVA学习中,很多人认为sleep和wait混淆在一起,等待线程。 这里主要介绍这两个人是什么,以及理解它们的区别和相似之处。

一般差异

简言之,wait ) )是线程同步的实例方法。 在java.lang.Object中定义,因此可以调用任何对象。 但是,前提是在同步代码块中调用该对象,并解除该对象的锁定,以便另一个线程可以跳转并获取锁定。 另一方面,Thread.sleep ) )是可以从任何上下文中调用的静态方法。 Thread.sleep ()暂停当前线程,且不解锁。

主要区别

sleep ) )线程控制自己的进程。 wit ) )用于线程间通信,使具有对象锁的线程等待指定时间或通告)。

wait ) )释放锁定和监视器,sleep ) )不释放锁定、监视器等。 wit )用于线程间通信,sleep )用于在运行时部署暂停

适用的领域。 wait只有放在同步语句块中才有意义。

注意事项

wait会代替sleep吗?

否,直接调用wait将抛出Java.lang.illegalmonitorstateexception异常。 这是因为尚未获取对象锁定,因此无法解除锁定。

怎么获得锁?

执行对象的同步实例方法。

执行对象感知类的同步静态方法。

运行同步代码块,该代码块已将同步添加到对象中。

示威游行

Thread.sleep

静态语音方法1 (

同步(锁定) {

try {

system.out.println (' [ ' thread.current thread ] ].getname (' ) begin sleep . ' );

thread.sleep(5_000;

system.out.println (' [ ' thread.current thread ) getName ) ' ] end sleep . ' );

} catch (互联互通) )

e .打印堆栈跟踪(;

}

}

}

publicstaticvoidmain (字符串[ ] args ) {

stream.of(T1 ),T2 ).Foreach ) name-newthread ) differenceofwaitandsleep : method 1,name ) (.start )

}

运行此示例总共需要10S。 T1线程获得锁定后,暂停执行。 此时,LOCK保留在T1线程中,并获取到T2线程中

[T1] begin sleep .

[T1] end sleep .

[T2] begin sleep .

[T2] end sleep .

Object.wait

静态语音方法2 (

同步(锁定) {

try {

system.out.println (' [ ' thread.current thread ().getName ) ' ] begin wait . ' );

LOCK.wait (;

system.out.println (([ ' thread.current thread ) ) ] end wait );

} catch (互联互通) )

e .打印堆栈跟踪(;

}

}

}

publicstaticvoidmain (字符串[ ] args ) {

stream.of () T1 ),T2 ).Foreach ) name-newthread ) differenceofwaitandsleep 33603360 method 2,name ) (.start ) )

}

运行此示例时,将立即输出T1/T2 begin wait .但不输出T1/T2 end wait . 这是因为没有线程调用LOCK.notify/notifyAll进行唤醒

[T1] begin wait .

[T2] begin wait .

结论

调用:

wit ) ) :对象调用,当前线程必须与具有锁定的对象同步。

sleep ) ) :线程调用,始终执行的当前线程

同步:

wait ) ) :同步多个线程同时访问一个对象

sleep () :多个线程同步等待线程休眠

洛克:

wait ) ) :将有机会解锁并由其他线程执行

sleep ) ) :持有锁定,在一定时间后释放或中断(interrupt )。

唤醒条件:

wait ) ) :到被调用的通告、通告全部

seep(: )至少直到过期或调用interrupt

使用:

sleep ) ) :用于时间同步

wait(:用于多线程同步)

-说点什么

个人QQ:1837307557

battcn开源群(面向初学者) 391619659

微信公众号: battcn (欢迎开玩笑) ) )。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。