多线程wait和sleep区别,死锁

wait和sleep

相同点:
1.wait 和 sleep都可以让线程进入休眠状态。
2.wait 和 sleep在执行的过程中都可以接收到终止线程执行的命令
不同点:
1.wait 使用必须和 synchronized一起使用,而sleep不用。
2.wait 在执行的时候会释放锁,sleep不会释放锁。
3.wait是Object类的方法,sleep是Thread的方法
4.默认情况下wait(不传递任何参数或者是参数为0的情况下)它进入waiting状态,而sleep会进入timed_waiting状态
5.使用wait时可以主动的唤醒线程,而使用sleep时不能主动的唤醒线程。
sleep(0) 表示 0毫秒之后继续执行,而wait(0)表示一直休眠。
wait方法在执行之前必须先加锁,如果wait和notify配合synchronized使用时,一定要注意使用同一把锁。wait和notify一起使用时,一定要注意使用同一把锁。

死锁

在两个或者两个以上线程运行时,因为资源抢占而造成线程一直等待
线程1已经拥有了资源1,还在抢占 资源2,线程2有了资源2,还在抢占资源1.

死锁代码

synchronized(lockA){
Thread.sleep(1000);
synchronized(lockB){
//业务代码
}
}
synchronized(lockB){
Thread.sleep(1000);
synchronized(lockA){
//业务代码
}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个多线程安全定时器的示例代码: ```python import threading import time class Timer: def __init__(self, timeout, callback): self.timeout = timeout self.callback = callback self.timer_thread = threading.Thread(target=self.run) self.timer_thread.daemon = True self.timeout_lock = threading.Lock() self.timeout_event = threading.Event() def start(self): self.timer_thread.start() def run(self): while not self.timeout_event.wait(self.timeout): with self.timeout_lock: if self.callback: self.callback() def cancel(self): with self.timeout_lock: self.callback = None self.timeout_event.set() ``` 这个定时器使用了一个线程来实现定时功能,并且使用了来避免资源抢占和死锁。具体来说,这个定时器有以下几个特点: 1. 初始化时,需要传入一个超时时间和一个回调函数。超时时间表示定时器的间隔时间,回调函数表示定时器触发时需要执行的操作。 2. 定时器使用一个线程来实现定时功能,并且这个线程是一个守护线程,当主线程退出时,它会自动退出。 3. 定时器使用了一个来保证回调函数的安全性。具体来说,在定时器触发时,会先获取,然后再执行回调函数。这样可以避免多个线程同时执行回调函数,导致资源抢占和死锁。 4. 定时器使用了一个事件来控制定时器的启动和停止。当定时器启动时,事件会被清除,当定时器停止时,事件会被设置。 5. 定时器提供了一个取消方法,可以在定时器启动后随时取消定时器。具体来说,取消定时器会先获取,然后把回调函数设置为 None,最后设置事件,这样可以保证定时器的安全性。 下面是一个使用示例: ```python def hello(): print("Hello, world!") timer = Timer(1, hello) timer.start() time.sleep(5) timer.cancel() ``` 这个示例中,定时器每隔 1 秒会执行一次 hello 函数,然后程序会等待 5 秒钟后,再取消定时器。在定时器被取消后,程序会退出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值