线程的同步

** 多个线程同时运行,线程的调度是由操作系统决定的,程序本身无法决定。**
图片说明
多次运行上述代码你会发现结果不同。
图片说明

一个相加赋值的操作本身是由三部分组成的,加载,相加,赋值,如果当thread1加载进数据后就被暂停了,thread2获得了cpu的执行权,执行加载也会将未被修改的加载进去,在进行之后的操作后,就能得到两边的结果都是101。同时也说明相加赋值的操作不是原子性操作。
为了保证一系列操作作为原子操作,必须保证一系列执行过程中,不被其他进程所抢占。我们可以对代码进行加锁和解锁。
图片说明
图片说明
图片说明
synchronizatied代码块无法并发执行,加锁解锁需要消耗时间,所以性能比较低。
图片说明
图片说明
图片说明
图片说明

图片说明

图片说明
图片说明
图片说明
图片说明
图片说明
图片说明
图片说明

死锁

图片说明
图片说明
图片说明

图片说明

图片说明
图片说明

图片说明

wait和notify

图片说明
因为我们使用的是this对象作为我们的锁对象,所以使用this来调用wait方法
图片说明

图片说明
图片说明

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务