Thread-2

简介: 快速学习Thread-2

一.常见方法

1.yield();

当前获取cpu时间的线程释放cpu,但是并不代表他不会继续抢占,相反他还会和剩余的其他线程重新抢占cpu

和线程的优先级有关

2.join();

迅雷下载和迅雷看看:边下边看

需求:如果没有加载完成是无法播放的,一个线程是下载,一个线程是播放,需要保证顺序

被设置为join的线程执行完毕以后,其他线程才会继续执行

3.守护线程: Thread.setDaemon(boolean flag)

一个线程如果被设置为守护线程以后,当其他线程执行完毕,守护线程不管是否还在执行,他会强制结束


二.同步

一群人上公交车…

同步:依次排队上公交车,前面的人上了之后后面的才能上

异步:一群人上公交车,只有又能进去的位置就进去,比如窗户,后门,天窗,

异步的效率会比同步的快,但是可能会有数据的不安全的问题

多线程并发执行就容易出现线程安全问题

   原因:共享实例变量数据更新不一致
   如何解决:
   1.使用synchnorized关键字锁对象--解决完自动解锁
   2.使用synchnorized代码块     --自动解锁
   3.使用互斥锁--需要手动

死锁的概念:

高圆圆:苏老公,今天我们吃了饭去看电影

苏老公:高圆圆,今天我们看了电影去吃饭

最终互不相让—>饭没得吃,电影没得看

两个线程互相占据了对方的锁对象,


三.wait和notify

1.方法的一些使用

wait()和sleep(long time)

a.wait()他是Object类的方法,sleep他是Thread的方法

b.wait()导致线程阻塞,必须使用其他方法唤醒

c.sleep调用以后,线程会进入休眠状态,让出cpu的优先级(时间片)

2.生产者消费者模型

三个土匪分脏款:

一个老大和三个土匪历尽千辛万苦,终于抢来了10000大洋,

然后大哥给三人开三个线程分钱,前期怎么分, 发现最后得到的钱都不能凑成10000快,

三人互相猜忌,总认为大哥私藏了一部分钱或者给其中的人多分了 钱,请你帮大哥想想办法,

保证最后分的钱能够凑成10000大洋

相关文章
|
4月前
|
Java C# Python
线程等待(Thread Sleep)
线程等待(Thread Sleep)
|
5月前
|
Java 编译器 UED
Thread.sleep()总结
Thread.sleep()总结
|
6月前
|
监控 算法 Unix
Thread.sleep(0) 到底有什么用
Thread.sleep(0) 到底有什么用
54 1
Thread
Thread方法
64 0
|
安全 Java 程序员
线程(Thread)
🌼什么是线程 🌼Java 线程在代码中的体现 🌷线程对象 🌷在 Java 代码中创建线程 🌷启动线程 🌷代码演示创建线程 🌼多线程下各个线程之间执行先后的随机性 🌷什么情况下,子线程会被先执行 🌷什么情况下,会出现线程调度 🌼线程安全 🌷线程之间的数据共享 🌷演示什么是线程不安全 🌷线程不安全的原因 🌷原子性 🌷系统角度分析线程不安全的原因
82 0
|
Java 调度 C++
你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)
你真的了解Thread.sleep(0)吗?以及Thread.sleep(1) vs Thread.sleep(0)
|
调度 C++
Thread.sleep(0) vs Thread.sleep(1) vs Thread.yield() vs Object.wait()
Thread.sleep(0) vs Thread.sleep(1) vs Thread.yield() vs Object.wait()
|
Java Linux 调度
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比
450 0
Thread.yield、Thread.sleep、Object.wait、 LockSupport.park 对比