Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁

Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁

ID:37708562

大小:119.00 KB

页数:15页

时间:2019-05-29

Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁_第1页
Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁_第2页
Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁_第3页
Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁_第4页
Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁_第5页
资源描述:

《Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Android进阶——多线程系列之wait、notify、sleep、join、yield、synchronized关键字、ReentrantLock锁前言多线程一直是初学者最困惑的地方,每次看到一篇文章,觉得很有难度,就马上叉掉,不看了,我以前也是这样过来的。后来,我发现这样的态度不行,知难而退,永远进步不了。于是,我狠下心来看完别人的博客,尽管很难但还是咬着牙,不懂去查阅资料,到最后弄懂整个过程。虽然花费时间很大,但这就是自学的精髓,别人学不会,而我却学到了。很简单的一个例子,一开始我对自定义View也是很抵触,看到很难的图就不去思考他,故意避开它,然而当我看到自己喜欢的雷达图时,很

2、有兴趣的去查阅资料,不知不觉,自定义View对我已经没有难度了。所以对于多线程我也是0基础,不过我还是咬着牙皮,该学的还是得学。这里先总结这几个类特点和区别,让大家带着模糊印象来学习这篇文章Thread是个线程,而且有自己的生命周期对于线程常用的操作有:wait(等待)、notify(唤醒)、notifyAll、sleep(睡眠)、join(阻塞)、yield(礼让)wait、notify、notifyAll都必须在synchronized中执行,否则会抛出异常synchronized关键字和ReentrantLock锁都是辅助线程同步使用的初学者常犯的误区:一个对象只有一个锁(正确的)

3、线程同步之synchronized关键字马上就过年了,火车抢票又是一年沸沸扬扬的事情,这也就好比我们的多线程抢夺资源是一个道理,下面我们通过火车抢票的案例来理解publicclassSyncActivityextendsAppCompatActivity{privateintticket=10;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_sync);for(inti=0;i<10;i+

4、+){newThread(){@Overridepublicvoidrun(){//买票sellTicket();}}.start();}}publicvoidsellTicket(){ticket--;System.out.println("剩余的票数:"+ticket);}}这里我们通过开启十个线程来购买火车票,不过火车票只有十张,下面通过打印信息来看一下抢票的情况剩余的票数:9剩余的票数:8剩余的票数:7剩余的票数:6剩余的票数:5剩余的票数:1剩余的票数:1剩余的票数:1剩余的票数:1剩余的票数:0可以发现,票数出现了误差,这明显就是不行的,这也是因为开启了十个线程,大家都抢着自

5、己的票。上面这种情况是因为其中有四个线程都挤在一起了,然后一起执行了【ticket–;】,接着再一起执行【System.out.println(“剩余的票数:”+ticket);】导致的。那么该如何保证大家都是能够自觉排队,井然有序的抢票呢。这个时候就要用到synchronized关键字方法一:我们在方法上添加synchronized关键字publicclassSyncActivityextendsAppCompatActivity{privateintticket=10;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){s

6、uper.onCreate(savedInstanceState);setContentView(R.layout.activity_sync);for(inti=0;i<10;i++){newThread(){@Overridepublicvoidrun(){//买票sellTicket();}}.start();}}//添加在这里publicsynchronizedvoidsellTicket(){ticket--;System.out.println("剩余的票数:"+ticket);}}这样就表示这个方法是同步的,只能由一个个线程来争夺里面的资源,下面通过打印信息可以验证剩余的票

7、数:9剩余的票数:8剩余的票数:7剩余的票数:6剩余的票数:5剩余的票数:4剩余的票数:3剩余的票数:2剩余的票数:1剩余的票数:0方法二:我们在方法内添加synchronized关键字publicclassSyncActivityextendsAppCompatActivity{privateintticket=10;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。