COREJAVA部分---线程.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
COREJAVA部分---线程

线程:解决多个代码段同时执行问题 OS---------多进程(QQ/飞信/PS) JVM是一个进程,包括多线程,main方法是主线程 多进程之间内存独立,多线程之间,堆(对象)内存共享,栈内存独立. CPU在同一时间点上只能运行一个线程,人的感觉是时间段,多线程是针对在时间段,但是时间很短,人反映不过来,认为是并行同时的. 线程同时运行,不依赖于其他的线程(不代表不影响,有可能影响其他线程) Java线程需要虚拟CPU(CPU时间片)代表一个类Thread 代码和数据代表一个接口Runnable (Thread类已经实现了Runnable接口,具备了线程三个要素) 写线程步骤1.继承thread 2.重写run方法 线程中过时方法禁止使用!!!!!!!!! Thread.currentThread()用于在Runnable子类中取得当前线程名 守护线程的存在依赖于其它非守护线程.(类似寄生虫.寄主死掉,自己也会再消耗完时间片死掉)gc就是个守护线程, run()?不启动新的线程,只有start方法可以启动新的线程。 start()使该线程开始执行;Java 虚拟机调用该线程的 run 方法。?boolean isDaemon()?测试该线程是否为守护线程 ?void setDaemon(boolean?on)将该线程标记为守护线程或用户线程。 ?void join(long?millis) 等待该线程终止的时间最长为 millis 毫秒。?等待该线程终止。 static?void yield()让位 只向优先级高的或平级让位,优先级高抢的快,受优先级影响 暂停当前正在执行的线程对象,并执行其他线程。 static?void sleep(long?millis)在指定的毫秒数内让当前正在执行的线程休眠(暂停执行),此操作受到系统计时器和调度程序精度和准确性的影响。 /*针对堆内存共享,同时操作同一片区域,并行访问问题*/…} 2.同步语句块 在需要同步的语句中用synchronized(){}括起来 void method(){ synchronized(this){…}}????????? this代表对象,同步时必须只能是同一个对象,所以同步的效率低,避免使用 同步要尽量使用最小的单位封锁,体现原子性(不可再分) **所有的对象在内存中都有对象锁,同步依靠对象锁完成** 释放锁的情况: 同步语句块结束2.执行break,return 跳出同步语句块 3.调用对象.wait() 4.在同步语句块中未捕获的异常 死锁:某线程不释放对象锁而导致程序死掉 避免死锁原则:1.顺序上锁(A-B-C-D)2.不要回调3.反向解锁(D-C-B-A) 需要使用同步的情况: 并行访问出问题,必须同步 synchronized(对象)利用对象锁可以实现同步 同步时避免死锁 StringBuffer线程安全效率低就是因为是同步的,方法由synchronized修饰的 StringBuilder没有 Collections中包括了同步list map set的方法,返回同步以后的集合 static T ListT synchronizedList(ListT?list) ??????????返回指定列表支持的同步(线程安全的)列表。 static K,V MapK,V synchronizedMap(MapK,V?m) ??????????返回由指定映射支持的同步(线程安全的)映射。 static T SetT synchronizedSet(SetT?s) ??????????返回指定 set 支持的同步(线程安全的)set。 wait()和notify()/notityAll()都是Object的方法 实例 package Threads; /*针对堆内存共享,同时操作同一片区域,并行访问问题*/ public class Account implements Runnable { private int money=2000;//账户余额 public void run(){//取钱过程 synchronized(this){//同步关键字,让线程并行变成串行 //4.t1运行到对象锁池拿到锁回到就绪--运行--阻塞--就绪--运行--消亡释放锁 //在t1回到就绪时,t2就绪--若运行--对象锁池(等t1消亡才能拿到对象锁出去)--就绪--运行-堵塞--就绪--运行--消亡 System.out.println(Thread.currentThread().getName()+ ); int temp=money;//远端取的钱数从数据

文档评论(0)

xcs88858 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档