多线程通信之优化升级+JDK1.5升级版后的新方案

1.刚开始时由于线程的执行动作一致,所以只要同步关键代码,即可解决访问共享数据的安全问题。

2.当线程动作不相同,利于t1存,t2取时,会出现动作不同,在写同步代码的时候,一定注意同步的前提

一、必须是多个线程

二、锁必须是同一个锁(可以使用内存中的唯一对象)

本人学习到此处,有一疑问,这个锁具体是怎么个运转机制,由于封装,未能了解,如果有大牛,还请给解释下。。。


3.为了实现t1、t2线程的存取动作交替运行,加入了flag标记为,引入了wait(),notify(),notifyAll()方法,但同时也埋下了隐患,

在flag标记为判断时,如果使用if语句判断,会使得唤醒的线程没能实时判断flag标记,出现了数据错乱,使用while循环可以解决

在使用notify()和notifyAll()时会唤醒本方的线程,(浪费资源,因为要存取交替进行,存线程唤醒存线程,唤醒后还是会继续wait()),而且使用notify()时可能会出现线程全部处于等待的挂机状态

4.当多生产者消费者问题出现后,即真正的多线程时,使用notifyAll()会极大地浪费效率,我们可以使用JDK1.5升级的新功能

1.使用lock代替synchronized函数和synchronized代码块

2.使用condition对象代替监视器,即原来的object,但会抛出异常,这个需要注意

3.lock,lock   lock.unlock   condition.await()   condition.signal   condition.signalAll  熟悉这几个的使用方法

4.由于lock升级后支持多个相关的condition对象,即生产者代码中可以选择性的唤醒消费者的线程,一个或者多个,完美的解决了原来的motify唤醒本方线程的问题


以下是看毕向东老师视频中的一些总结,感觉很有必要,在这里写下来共同分享

1.操作线程的方法定义在object类中:因为这些方法在操作同步中线程时,都必须要标识他们所操作线程的锁,即监视器,只有同一个锁上的等待线程,才可以被notify唤醒,而锁可以是任意对象,所以可以被任意对象调用的方法要定义在上帝object类中。

2.interrupt将冻结的线程强制转换到运行状态,如唤醒那些在运行时抛出异常的线程,这样保证程序不被挂起

3.线程停止:由于stop方法已经过期,现在停止线程的话,,可以将run()方法结束。开启多线程运行,运行代码通常是循环结构,只要控制住循环,让run方法结束,就可以停止线程。但是当线程处于了冻结状态,无法读取标记flag,这样线程就没法结束。可以使用interrupt方法,将线程的冻结状态清除,强制让线程回复到运行状态。

4.守护线程:使用方法,要在start前标识为守护线程,setDaemon

当正在运行的线程都是守护线程时,Java虚拟机会退出

可以将某些依赖别的线程的线程标识为守护线程,例,存取数据交替时,如果取数线程终止了,那么存数就没有意义了,可以标记为守护线程。

5.join():被线程调用时,即线程申请加入运行中来,表示他需要cpu资源,一旦线程调用join()方法后,主线程会等待该线程运行结束后,在运行主线程

6.Thread.toString():编号+优先级+线程组

优先级:一共有1-10级,一般为5,可以使用setPriority设置,由于一般只表示1,5,10,可以用MAX_PRIORITY、MIN_PRIORITY、NORM_PRIORITY

注:设置为最高后,不代表cpu只执行它,只是执行频率会高,最低同理

线程组:该线程被谁开启,即属于哪个组

7.yield():暂停当前线程,执行别的线程,可以保证所有线程都被执行到

心得:由于主函数包含的内容越来越多,如果按顺序执行,用户的等待时间将会大大增加,体验性降低,此时可以用线程将一些功能代码封装,这样主函数启动的同时,有多个线程在执行功能模块,给予用户很好的体验度,等待时间大大减少。当然当部分代码需要被单独运行时,也可以用线程封装起来。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值