版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序员JAVAJAVA学习笔记2013-05-2717:33149(0收藏-------androidjavajava-概进程:是一个正在执行中的程序。每一个进程执行都有一个执行顺有一个线程。行。多线程存在的意义:充分利用cpu的空闲时间,提高进程的整体运行创建线程的两种方Thread类子类覆盖父类中的run方法,将线程运行的代码存放在中建立子类对象的同时线程也被创建通过调用start方法开启线示例代码[java][java] classDemoextends{ publicvoid{ for(inti={ System.out.println(“demorun---}}10.13.13.{d.start();//调用start方法执行该线程的run19.}DemodnewDemo();//publicstaticvoidmain(String[]12.classRunnable接口子类覆盖接口中的run方Thread类创建线程,并将实现了Runnable的子类对象作为参数传递给Thread构造函数。[java] classTestimplement{publicvoidrun()//[java] classTestimplement{publicvoidrun()//run方{for(intx=0;x<60;{}}11.14.class15.publicvoidmain(String[]{TesttenewTest();实现Runnable接口的对ThreadnewThread(te);将那个对象作为参数传递到Thread Threadt2=new t1.start();//调用Thread类的start方法开启线 24.两种线程创建方式的区别继承Thread创建对Thread子类无法再从其它类继承(java语言单承)可直接操作
编写简单,run()方法的当前对象就是线程对象使用Runnable接口创建线程可以将CPU,代码和数据分开,形成清晰的模型线程体run()方法所在的类可以从其它类中继承一有利于保持程序的设计风格一致继承Thread线程代码存放于Thread子类run方法中实现Runnable接口线程代码存在于接口的run中,而问题:为什么要将Runnable接口的子类对象传递给Thread的构造函答:因为自定义的run方法所属的对象是Runnable接口的子类对象,所以要让线程去执行指定对象的run方法,就必须明确该run方法所线程的四种sleep方法需要指定睡眠时间,单位是毫秒权。线程的对象获取与名称的操线程都有自己的默认名称,格式为:Thread-编号该编号从0始。staticThreadcurrentThread():获取当前线程对象。getName():获取线程名称。[java][java] classTestextends2. Test(Stringname)// publicvoidrun()// for(intx=0;x<60;{ Name()+"}}15.class{publicstaticvoidmain(String[]{Testt1newTest("one---");//调用构造函数设置线程名Testt2=newfor(intx=0;x<60;{ }}31.线程的安导致安全问题的出现的原因多个线程出现延线程随机响是非常大的synchronized(对象{需要同步的代}的功能。4个窗口售票示例[java][java] classTicketimplements2. privateinttick= ObjectobjnewObject();//建立一个obj类对象,供synchronized作参 publicvoid .sale:"+tick-- 17.19.class20. publicstaticvoidmain(String[] TickettnewTicket();//创建Ticket对象Thread对象作构造函数的参用 Threadt1=new Threadt2=new Threadt3=new Threadt4=new //开始4个线}37.同步的前提 >同步需要两个或者两个以上的线 >多个线程使用的是同一未满足这两个条件,不能称其同步锁,这是很耗费资源的,无形中会降低程序的运行的效率。同步函格式:在函数上加上synchronized修饰符即可所属对象,就是this。同步中嵌套同步,但是锁却不同,就会产生[java] 如:A线程A锁,B线程持有B锁,让A线程去抢夺B锁,B程去[java] 1.1.classDeadimplementsprivatebooleanb={}{{publicvoidthis.b=2.{{//0线程,持有了A //等待B{ {{//1线程就进来了,持有了B synchronized(Locks.locka)//等待获得A{ }}}}}39.//创造class{publicstaticObjectlocka=newpublicstaticObjectlockb=new45.46.class47. publicvoid Deadd1new Deadd2new Thread=new Thread=new 57.线程间通多个线程操作同一个资源,但是操作的动作不注意:wait();notify();notifyAll(监视器的线程操作,所以要使用在同步中,因为只有同步才具有锁。问题:wait(),notify(),notifyAll()Object类中?这些方法存在与同步使用这些方法时必须要标识所属的同步的Object须是同一个锁。问题:wait(),sleep()有什么区别wait():释放cpu执行权,释放锁sleep():释放cpu执行权,不释放锁新特性:JDK1.5之后新增了java.until.concurrent.locks这个包为JDK1.5中提供了多线程升级解决方案Synchronized换成LockObject中的wait,notifynotifyAll,替换了对象
该对象可以Lock获取该示例中,实现了本方只唤醒对方操作代码如下[java][java] 1.1.import3.classpublicstaticvoidmain(String[]Resourcer=newProducerpro=newThreadt2=newThreadt4=newThreadt3=newThreadt1=newConsumercon=new{4. 23.25.class26. privateString privateintcount= privatebooleanflag= privateLocklock=new privateConditioncondition_pro= privateConditioncondition_con= publicvoidset(Stringname)throws =name+"-- 者 flag= publicvoidout()throws { flag= { 71.classProducerimplements{privateResourceres;Producer(Resource{this.res= publicvoid{{{ catch(InterruptedException{} 95.97.classConsumerimplements98. privateResource Consumer(Resource this.res= publicvoid catch(InterruptedException 停止定义循环结束标记(run方法结束因为线程运行代码一般都是循环,只要控制了循环即可使用interrupt(中断)方注:stop方法已经过时不再使用。特殊情况当线程处于了冻结状态,就不会到标记。那么线程就不会结束。当没有指定的方式让冻结的线程恢复到运行状态时,这时需要标记让线程结束。Thread提供该方法测试代码[java][java] classStopThreadimplements2. privatebooleanflag publicsynchornizedvoid catch(InterruptedException flagfalse;// publicvoid flag= 24.26.class27. publicstaticvoidmain(String[] StopThreadst=new Threadt1=new Threadt2=new intnum= if(num++== 56.线程类的其他方setDaemon()就相当于线程,当前台线程结束时,线程跟着也结束。注意:该方法必须在启动线程前调用该方法首先调用该线程的checkAccess法,且不带任何参数。这可能抛出SecurityException(在当前线程中)[java] 用法示例代[java] classStopThreadimplements2. publicvoidrun()//原本run方法是一个死循环,但是将线程定义为守护线程后,主程结束,run方法的线程立即也结束 10.11.class12. publicstaticvoidmain(String[] StopThreadst=new Threadt1=new Threadt2=new intnum= if(num++== 34.34.抢夺cpu执行权,适用于临时加入线程用,先执行完,其他线执[java] 测试[java] 1.classDemoimplements2. publicvoid for(intx=0;x<70; 10.11.class12. publicstaticvoidmain(String[]args)throws Demod=new Threadt1=new Threadt2=new t1.join();//t1获取cpu的执行权,主线程处于冻结状态,只有t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度房屋买卖定金协议智能家居系统互联互通合同
- 2025年度汽车租赁服务经销商授权协议
- 2025年度离职员工离职后企业法律风险防控及合规管理协议
- 2025年度二零二五年度门面房使用权租赁与转让合同
- 2025年度遗产继承遗产继承权争议解决合同
- 2025年度门面租赁合同电子版(含租赁期满资产评估及补偿)
- 二零二五年度船舶交易风险评估合同
- 2025年度模具行业人才培训与购销合同4篇
- 2025年度私人住宅出售与周边配套设施合同
- 二零二五年度诊所医师聘用合同(含医疗设备租赁)
- 书籍小兵张嘎课件
- 艺术哲学:美是如何诞生的学习通超星期末考试答案章节答案2024年
- 北京海淀区2025届高三下第一次模拟语文试题含解析
- 量子医学治疗学行业投资机会分析与策略研究报告
- 多重耐药菌病人的管理-(1)课件
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 环境监测对环境保护的意义
- 2023年数学竞赛AMC8试卷(含答案)
- 神经外科课件:神经外科急重症
- 2023年十天突破公务员面试
- 《疯狂动物城》中英文对照(全本台词)
评论
0/150
提交评论