- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
java 线程安全四个方式五个等级(Java thread safety in four ways, five grades)
java 线程安全四个方式五个等级(Java thread safety in four ways, five grades)
四种方式同步关键字
同步method() { }
同步(对象引用){ /* */ }块
静态同步method() { }
同步(className。类)
其中1和2是代表锁当前对象,即一个对象就一个锁,3和4代表锁这个类,即这个类的锁
要注意的是同步method()不是锁这个函数,而是锁对象,即:如果这个类中有两个方法都是同步进行,那么只要有两个线程共享一个该类的参考,每个调用这两个方法之一,不管是否同一个方法,都会用这个对象锁进行同步。锁类的3和4类推,即该类的不同参考调用了同步区段的咚咚就会受类锁的控制
还有,如果两个函数调用的先后顺序不能被打断,那么可以有个专门的锁对象来完成这个任务:
类脉乐
{
同步getlock()
{
/ / # # # #还没写完
}
}
五个等级参见有效的java项目52:记录线程安全
不变的不可变对象
线程安全的线程安全的,可以放心使用,如java.util.timer
有条件线程安全的条件线程安全的,如矢量和哈希表,一般是安全的,除非存在几个方法调用之间的顺序不能被打断,这时可以用额外的锁来完成
线程兼容的可以使用同步(对象引用)来协助完成对线程的调用
线程对立不安全的
等待和notifyAll
在循环中使用等使用notifyAll而不是通知
管
java中也有管的,四个类:输入管道,pipedinputreader,输出管道,pipedoutputwriter下面是一段生产者消费者的代码(摘自核心javaii):
/ *设置管道*
输出管道pout1 =新pipedoutputstream();
输入管道Pin1 =新的输入管道(pout1);
输出管道pout2 =新pipedoutputstream();
输入管道PIN2 =新的输入管道(pout2);
/ *构造线程*
生产产品=新生产者(pout1);
滤波器滤波=新的过滤器(PIN1,pout2);
消费者的缺点=新的消费者(PIN2);
/ *启动线程*
产品start();滤波。start();start()利弊;
注意
长和双是简单类型中两个特殊的咚咚:java读他们要读两次,所以需要同步
死锁是一个经典的多线程问题,因为不同的线程都在等待那些根本不可能被释放的锁,从而导致所有的工作都无法完成。假设有两个线程,分别代表两个饥饿的人,他们必须共享刀叉并轮流吃饭。他们都需要获得两个锁:共享刀和共享叉的锁。假如线程”“获得了刀,而线程“B”获得了叉。线程一就会进入阻塞状态来等待获得叉,而线程B则阻塞来等待一所拥有的刀。这只是人为设计的例子,但尽管在运行时很难探测到,这类情况却时常发生。虽然要探测或推敲各种情况是非常困难的,但只要按照下面几条规则去设计系统,就能够避免死锁问题:
让所有的线程按照同样的顺序获得一组锁这种方法消除了X Y的拥有者分别等待对方的资源的问题和。
将多个锁组成一组并放到同一个锁下。
In the example of deadlock ahead, you can create a lock for a silver object. Therefore, the lock of the silver must be obtained before the knife or fork is obtained.
Identify the resources that are not blocked and use variables to indicate them. When a thread obtains the lock of a silver object, it can check whether the entire set of objects in the collection is locked. If it is, it can get the relevant locks, otherwise it will release the silverware lock and try again later.
Above all, design the whole system carefully and carefully before you write code. Multithreading is difficult, and before you start programming, the detailed design of the system can help you avoid the difficulty of finding deadloc
您可能关注的文档
- css 滤镜使用(CSS filter usage).doc
- css(CSS).doc
- cs理论介绍(The introduction of theory of CS).doc
- ctrl + z的解释(CTRL + Z explanation).doc
- cu 必备高中方程式(Cu high school equation).doc
- cut短语归纳(Cut phrase induction).doc
- cpu类型(CPU type).doc
- cv练声方法(CV training method).doc
- cwrsync 在window下实现文件同步操作步骤(Cwrsync implements file synchronization operations under window).doc
- c_缺陷与陷阱(C_ defects and pitfalls).doc
- java(常用单词)(Java (commonly used words)).doc
- java-反射机制txt(Java- reflection mechanism TXT).doc
- java.day5_2(对象和类)(Java.day5_2 (objects and classes)).doc
- ip语音(voip)通信中实时传输协议(rtp)的脆弱性(The vulnerability of real time transport protocol (RTP) in IP voice (VoIP) communications).doc
- java web编程学习(java web编程学习).doc
- java.day7_1(修饰符static)(java.day7 _ 1 (修饰符static)).doc
- javamail用法说明(JavaMail usage instructions).doc
- java2(Java2).doc
- javaoop面向对象笔记(Javaoop object oriented notes).doc
- javase 复习大纲(javase 复习大纲).doc
文档评论(0)