第13天多线程thread创建能够描述Java中运行原理_第1页
第13天多线程thread创建能够描述Java中运行原理_第2页
第13天多线程thread创建能够描述Java中运行原理_第3页
第13天多线程thread创建能够描述Java中运行原理_第4页
第13天多线程thread创建能够描述Java中运行原理_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

13CPUCPUJava使用的为抢占式调度。{String(Stringname){=name;}void for(inti=1;i<=20;i++{String(Stringname){=name;}void for(inti=1;i<=20;i++{}}voideat()for(inti=1;i<=20;i++) }}}classclassThreadDemopublicstaticvoidmain(Stringargsp=new System.out.println("听完歌吃完饭了,该睡觉了}}dos窗口会看到不停的输出”xx在吃第几口饭”,这样的语句。为什ThreadThread是程序中的执行线程。Java法是将类为Thread的子类。该子类应重写Thread类的run方法。创建对象,开启线程。runmain另法是一个实现Runnable接口的类。该类然后实现run方法。然后RunnableThreadrunpublicpublicclassDemo01publicstaticvoidmain(String[]args)MyThreadmtnewMyThread("//在主方法中执行forfor(inti=0;i<10;i++){}}}publicpublicclassMyThreadextendsThreadpublicMyThread(Stringname//调用父类的String}*重写runpublicvoidrun()for(inti=0;i<10;i++){}}}runstartrunstart开启线程,jvm调用run方法在开启的线程中执行。ThreadThread类?startThreadThreadt1=new在新的线程中运行起来了,但是我们直接创建Thread对象,调用start方法,该start调用的是们需要让线程执行的代码。[javarun方法执行什么代码,所有没写run方法]startrun方法呢?run方法中。所以想要一个新线程执行我们的任务,必须先要开启线程,start方法,再由线程自动run方法,run方法--------肯定程对象中,我们查阅一下Thread的主线程的线程对象是你创建的吗?很明显不是,JVMThread类的API文档发现有个方法是获取当前正在运行的线程对象。还classMyThreadclassMyThreadextendsThread{//继承//复写其中的runpublicvoidfor(inti=1;i<=20;i++){}}}classThreadDemopublicstaticvoidmain(String[]args)MyThreadd1=newMyThread();MyThreadd2=newD1.start();//没有开启新线程在主线程调用rund2.start();//开启一个新线程,新线程调用run}}字顺延。如Thread-1......创建线程方式—Runnable创建线程的另法是实现Runnable接口的类。该类然后实现run方法。然Runnable的子类对象,传入到某个线程的构造方法中,开启线程。Runnable接口,RunableAPIRunnable接口说明文档:Runnable接口用来指定每个线程要执行的任务。包含了一个run的无参数抽象方法,需要由接口实现类重写该方法。1Runnable2run3ThreadpublicpublicclassDemo02publicstaticvoidmain(String[]args)Runnablerunn=new//将Runnable接口的子类对象作为参数传递给ThreadThreadthread=newThread(runn);Threadthread2=newThread(runn);for(inti=0;i<10;i++){}}}publicpublicclassMyRunnableimplements//定义线程要执行的runpublicvoidrun()for(inti=0;i<10;i++){}}}Runnable的原理和第式继承Thread类,线程对象和线程任务耦合在一起。一旦创建Thread类的runnableRunnable类型。RunnablenewnewThread()publicvoidrun()for(intx=0;x<40;x++){+"...X...."+}}RunnableRunnabler=newRunnable()publicvoidrun()for(intx=0;x<40;x++){+"...Y...."+}}new院要卖票,我们模拟院的卖票过程。假设要的是“功夫熊猫3”,本次的座位共100个(本场只能卖100)。口一起卖这100)publicpublicclassThreadDemopublicstaticvoidmain(String[]args)Ticketticket=new//3Threadt1=newThread(ticket,1");Threadt2=newThread(ticket,2");Threadt3=newThread(ticket,}}publicpublicclassTicketimplementsRunnable//100intticket=publicvoidrun()if(ticket>0)trytry}catch(InterruptedExceptione){}System.out.println(Thread.currentThread().getName()+"正在卖票:"+ticket--);}}}}0、-线程同步(java中提供了线程同步机制,它能够解决上述的线程安全问题。同步代码块(同步锁synchronized锁对象}同步代码块:在代码块上synchronized锁对象} publicpublicclassTicketimplementsRunnableintticket=Objectlock=newObject();publicvoidrun()synchronizedlock){if(ticket>0) try}catch(InterruptedExceptione){}"正在卖票ticket}}}}}publicpublicsynchronizedvoid} publicpublicclassTicketimplementsRunnable//100intticket=Objectlock=newObject();publicvoidrun()}}//同步方法,锁对象publicsynchronizedvoidif(ticket>0)try}catch(InterruptedExceptione){}System.out.println(Thread.currentThread().getName()+"正在卖票:"+ticket--);}}}静态同步方法:在方法上加上staticpublicpublicstaticsynchronizedvoid}静态同步方法中的锁对象是类名LockAPILock接口描述,Locksynchronized方法和语classclassXprivatefinalReentrantLocklock=newReentrantLock();publicvoidrun(){lock.lock();//blockuntilconditionholdstry{//...method}finally}}}publicclassTicketimplementsRunnable//100intpublicclassTicketimplementsRunnable//100intticket=//创建LockLockck=newpublicvoidrun()//sync

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论