Python的异步,python 同步
在JAVA学习中,很多人认为睡眠和等待是混淆的,等待线程。本文主要介绍这两个人是什么,了解他们的异同。
一般差异
简言之,wait)是线程同步的一个示例方法。在java.lang.Object中定义,所以可以调用任何对象。但是,前提是在同步代码块中调用对象并解锁,以便另一个线程可以跳转并获取锁。另一方面,Thread.sleep))是一个静态方法,可以从任何上下文中调用。Thread.sleep()暂停当前线程而不解锁它。
主要区别
Sleep))线程控制自己的进程。Wit))用于线程间通信,以使带有对象锁的线程等待指定的时间或通知)。
等待))解除锁和监视器,睡眠))不要解除锁、监视器等。Wit)用于线程间通信,sleep)用于在运行时部署暂停。
适用的字段。Wait只有放在同步语句块中才有意义。
需要注意的事项
等待会取代睡眠吗?
不会,直接调用wait会抛出Java . lang . illegalmonitorstateexception异常。这是因为没有获得对象锁,所以无法解锁。
如何获得一把锁?
执行对象的同步实例方法。
执行对象感知类的同步静态方法。
运行同步代码块,该代码块向对象添加了同步。
示范
线程.睡眠
静态语音方法1(
同步(锁定){
尝试{
system . out . println([ thread . current thread]])。getname()开始睡眠。);
thread . sleep(5 _ 000;
system . out . println([ thread . current thread)getName)]结束睡眠。);
} catch(互联))
E.打印堆栈跟踪(;
}
}
}
publicstaticvoidmain(string[]args){
(T1)的流,T2)。foreach)name-new thread)difference ofwaitandsleep:方法1,name)(。开始)
}
运行这个示例总共需要10秒钟。在线程T1获得锁之后,它挂起执行。此时,锁保留在T1线程中,并在T2线程中被获取。
[T1]开始睡眠。
[T1]结束睡眠。
[T2]开始睡觉。
[T2]结束睡眠。
反对,等等
静态语音方法2(
同步(锁定){
尝试{
system . out . println([ thread . current thread()。getName ) ]开始等待);
lock . wait(;
system . out . println(([ thread . current thread))]end wait);
} catch(互联))
E.打印堆栈跟踪(;
}
}
}
publicstaticvoidmain(string[]args){
(T1),T2)。foreach)name-new thread)difference ofwaitandsleep 33603360方法2,name)(。开始) )
}
运行此示例时,将立即输出T1/T2开始等待,但不会输出T1/T2结束等待。这是因为没有线程调用LOCK.notify/notifyAll唤醒。
[T1]开始等待。
[T2]开始等待。
结论
调用:
Wit)):对象调用,当前线程必须与带锁的对象同步。
Sleep)):线程调用,总是执行的当前线程。
同步:
Wait)):同步多个线程以同时访问一个对象
Sleep():多个线程等待线程同步休眠。
洛克:
Wait)):将有机会解锁并被其他线程执行
Sleep)):按住锁,一定时间后释放或中断。
唤醒条件:
Wait)):对被叫公告,所有公告。
Seep(:)至少直到它到期或中断。
使用:
Sleep)):用于时间同步
等待(:对于多线程同步)
-说点什么。
个人QQ:1837307557
Battcn开源小组(针对初学者)391619659
微信官方账号:battcn(欢迎开玩笑)))。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。