版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1Java多线程2概述线程的创建两种方式线程的同步synchronizedwait()/notifyAll()/notify()线程的生命周期3概述进程(Process)程序(Program)的一次动态执行过程,占用特定的地址空间在某种程度上相互隔离的、独立运行的程序多任务(Multitasking)操作系统将CPU时间动态地划分给每个进程,操作系统同时执行多个进程,每个进程独立运行进程的查看Windows系统:Ctrl+Alt+DelUnix系统:psortop4线程(Thread)线程是进程中一个“单一的连续控制流程”一个进程可拥有多个并行的线程一个进程中的线程共享相同的内存单元/内存地址空间可以访问相同的变量和对象,而且它们从同一堆中分配对象通信、数据交换、同步操作轻量级进程(lightweightprocess)单线程程序多线程程序一个线程两个线程6Java语言中的线程大多数现代的操作系统都支持线程Java是第一个在语言本身中显性地包含线程的主流编程语言,它没有把线程化看作是底层操作系统的工具每个Java程序都至少有一个线程—主线程当一个Java程序启动时,JVM会创建主线程,并在该线程中调用程序的main()方法JVM还创建了其它线程,如垃圾收集(gc)7Java实现多线程的方法java.lang.Thread类java.lang.Runnable接口多线程的用途Client/Server设计中的服务器端,如每个用户请求建立一个线程图形用户界面(GUI)的设计中提高事件响应的灵敏度从提高程序执行效率的考虑利用多处理器系统执行异步或后台处理等8初探线程publicclassSimpleThreadextendsThread{publicSimpleThread(Stringstr){super(str);}publicvoidrun()
{
System.out.println(getName()+“线程开始!");for(inti=0;i<8;i++){System.out.println(i+""+getName());try{sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}
System.out.println(getName()+"线程运行结束!");}}概述publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){
newSimpleThread(“A").start();
newSimpleThread(“B").start();}}9线程创建的两种方式继承java.lang.Thread类,重写run()方法实现java.lang.Runnable接口Runnable接口的唯一方法publicvoidrun()线程的创建10线程的创建publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){
newSimpleThread1("Jamaica").start();
newSimpleThread1("Fiji").start();}}publicclassSimpleThread2
implementsRunnable{Stringname;publicSimpleThread2(Stringstr){name=str;}publicvoidrun(){for(inti=0;i<8;i++){System.out.println(i+""+name);Thread.sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}System.out.println("DONE!"+name);}}publicclassSimpleThread1
extendsThread{publicSimpleThread1(Stringstr){super(str);}publicvoidrun(){for(inti=0;i<8;i++){System.out.println(i+""+getName());try{
sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}System.out.println("DONE!"+getName());}}publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){SimpleThread2a=newSimpleThread2("Jack");
Threadthread1=newThread(a); thread1.start(); SimpleThread2b=newSimpleThread2(“Tom");Threadthread2=newThread(b);thread2.start();}}11共享资源的访问多个线程对同一资源进行操作(读/写)当多个线程访问同一数据项(如静态字段、可全局访问对象的实例字段或共享集合)时,需要确保它们协调了对数据的访问,这样它们都可以看到数据的一致视图,而且相互不会干扰另一方的更改synchronized关键词wait()/notify()/notifyAll()方法线程的同步12线程的同步publicclassCubbyHole{
privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassProducerextendsThread{privateCubbyHolecubbyhole;publicProducer(CubbyHolec){cubbyhole=c;}publicvoidrun(){for(inti=0;i<10;i++){cubbyhole.put(i);System.out.println(“生产了:"+i);try{sleep((int)(Math.random()*100));}catch(InterruptedExceptione){}}}}publicclassConsumerextendsThread{privateCubbyHolecubbyhole;publicConsumer(CubbyHolec){cubbyhole=c;}publicvoidrun(){intvalue=0;for(inti=0;i<10;i++){value=cubbyhole.get();System.out.println(“消费了:"+value);}}}publicclassProducerConsumerTest{publicstaticvoidmain(String[]args){CubbyHoleh=newCubbyHole();Producerp=newProducer(h);Consumerc=newConsumer(h);p.start();c.start();}}13给关键部分(CriticalSection)加锁(lock)CubbyHole对象synchronized关键词
thetwothreadsmustnotsimultaneouslyaccesstheCubbyHole.publicclassCubbyHole{privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassCubbyHole{privateintcontents;publicsynchronizedintget(){returncontents;}publicsynchronizedvoidput(intvalue){contents=value;}}14线程的协调thetwothreadsmustdosomesimplecoordination.Producer通过某种方式告诉Consumer在CubbyHole中有值,而Consumer必须通过某种方式表示出CubbyHole中的值已被取走CubbyHole对象(CriticalSection)java.lang.Object类的方法wait()、notify()、notifyAll()15线程的同步publicclassCubbyHole{privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassCubbyHole{privateintcontents;privatebooleanavailable=false;publicsynchronizedintget(){while(available==false){try{
wait();//打开锁,等候Producer填值
}catch(InterruptedExceptione){}}available=false;notifyAll();returncontents;}publicsynchronizedvoidput(intvalue){while(available==true){try{
wait();//打开锁,等候Consumer取值
}catch(InterruptedExceptione){}}contents=value;available=true;
notifyAll();}}java.lang.Objectpublicfinalvoidwait()throwsInterruptedExceptionpublicfinalvoidwait(longtimeout)throwsInterruptedExceptionpublicfinalvoidnotifyAll()//唤醒所有等待的线程publicfinalvoidnotify()//随机唤醒一个等待的线程16线程的同步publicclassCubbyHole{privateintcontents;privatebooleanavailable=false;publicsynchronizedintget(){while(available==false){try{
wait();//打开锁,等候Producer填值
}catch(InterruptedExceptione){}}available=false;notifyAll();returncontents;}publicsynchronizedvoidput(intvalue){while(available==true){try{
wait();//打开锁,等候Consumer取值
}catch(InterruptedExceptione){}}contents=value;available=true;
notifyAll();}}线程consumerget()判断当前是否存有值有没有设置为空唤醒producer取值释放锁定等待新值线程producerput()判断当前是否存有值有没有释放锁定等待取值放值设置为有唤醒consumer17线程启动newSimpleThread1("Jamaica").start();classSimpleThread1extendsThread{……}SimpleThread2a=newSimpleThread2("Jack");Threadthread=newThread
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 管理学课件教学课件教学课件
- 数与形教学课件
- 呐喊明天课件
- c语言课件下载
- 初中+语文++七年级下册古诗文名篇名句理解性默写【必背】中考语文古诗词知识清单
- 《大学生的婚恋观》课件
- 《分红理财话术》课件
- 《硅弧焊整》课件
- 《婚姻法课件》课件
- ABB工业机器人应用技术 故障诊断与维护 课件任务1-2 认识和理解安全标志与操作提示
- 外研版(2019)必修第一册 Unit 6 At One with Nature Developing ideas 教学设计
- 第21课《小圣施威降大圣》同步课件 2024-2025学年七年级语文上册(统编版2024)
- 智能算力快速发展对电力供需的影响分析报告:储能
- 2024-2030年中国岩土工程行业发展模式与投资战略规划分析报告
- 北京市《配电室安全管理规范》(DB11T 527-2021)地方标准
- 《初心与使命-时代的美术担当》参考课件3
- 长春市轨道交通集团有限公司招聘笔试题库2024
- 新人教版八年级上册物理全册教学课件(2024年秋季新版教材)
- 村民积分管理指标体系和兑换制度(试行)
- AI时代大学生创新创业导航智慧树知到期末考试答案章节答案2024年西南大学
- UI设计师之路智慧树知到期末考试答案章节答案2024年重庆开放大学重庆工商职业学院
评论
0/150
提交评论