java大学教程ppt10

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

1JAVA语言程序设计周敏彤zhoumintong@suda.edu.cn2第九讲Java2平台包概述java.lang.Object类java.lang.System类java.lang.Math类基本数据类型的包装类字符串操作类日期的表示执行外部程序3第十讲线程概述线程的创建两种方式线程的同步1.synchronized2.wait()/notifyAll()/notify()线程的生命周期4概述进程(Process)程序(Program)的一次动态执行过程,占用特定的地址空间在某种程度上相互隔离的、独立运行的程序进程间通信管道、消息、共享内存、Socket多任务(Multitasking)操作系统将CPU时间动态地划分给每个进程,操作系统同时执行多个进程,每个进程独立运行进程的查看Windows系统:Ctrl+Alt+DelUnix系统:psortop5概述6概述7概述线程(Thread)线程是进程中一个“单一的连续控制流程”(asinglesequentialflowofcontrol)/执行路径一个进程可拥有多个并行的(concurrent)线程一个进程中的线程共享相同的内存单元/内存地址空间可以访问相同的变量和对象,而且它们从同一堆(heap)中分配对象通信、数据交换、同步操作轻量级进程(lightweightprocess)实现代价小,管理容易8概述Java语言中的线程第一个在语言本身中显性地包含线程的主流编程语言,它没有把线程化看作是底层操作系统的工具大多数现代的操作系统都支持线程每个Java程序都至少有一个线程—主线程当一个Java程序启动时,JVM会创建主线程,并在该线程中调用程序的main()方法JVM还创建了其它线程,如垃圾收集(garbagecollection)9概述多线程(MultiThreading)语言java.lang.Thread类java.lang.Runnable接口为什么?(用途)从提高程序执行效率的考虑最大限度地利用CPU效率应用在多处理器系统(SMP-SymmetricMultiProcessing)执行异步或后台处理等Client/Server设计中的服务器端,如每个用户请求建立一个线程,实现多个请求同时并发图形用户界面(GUI)的设计中提高事件响应的灵敏度10第十讲线程概述线程的创建两种方式线程的同步1.synchronized2.wait()/notifyAll()/notify()线程的生命周期11线程创建的两种方式1.“SubclassingThreadandOverridingrun”继承java.lang.Thread类,重写run()方法2.“ImplementingtheRunnableInterface”实现java.lang.Runnable接口Runnable接口的唯一方法publicvoidrun()线程的创建12初探线程publicclassSimpleThreadextendsThread{publicSimpleThread(Stringstr){super(str);}publicvoidrun(){for(inti=0;i8;i++){System.out.println(i++getName());try{sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}System.out.println(DONE!+getName());}}概述publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){newSimpleThread(Jamaica).start();newSimpleThread(Fiji).start();}}java.lang.Threadpublicstaticvoidsleep(longmillis)throwsInterruptedExceptionCausesthecurrentlyexecutingthreadtosleep(temporarilyceaseexecution)forthespecifiednumberofmilliseconds.mainFijiJamaica运行结果:0Jamaica0Fiji1Jamaica1Fiji2Jamaica2Fiji3Jamaica4Jamaica5Jamaica3Fiji6Jamaica7Jamaica4FijiDONE!Jamaica5Fiji6Fiji7FijiDONE!Fiji13再探线程线程的创建publicclassTwoThreadsDemo{publicstaticvoidmain(String[]args){newSimpleThread1(Jamaica).start();newSimpleThread1(Fiji).start();}}publicclassSimpleThread2implementsRunnable{Stringname;publicSimpleThread2(Stringstr){name=str;}publicvoidrun(){for(inti=0;i8;i++){System.out.println(i++name);try{Thread.sleep((long)(Math.random()*1000));}catch(InterruptedExceptione){}}System.out.println(DONE!+name);}}publicclassSimpleThread1extendsThread{publicSimpleThread1(Stringstr){super(str);}publicvoidrun(){for(inti=0;i8;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(Jamaica);Threadthread1=newThread(a);thread1.start();SimpleThread2b=newSimpleThread2(Fiji);Threadthread2=newThread(b);thread2.start();}}java.lang.ThreadpublicThread(Stringname)publicThread(Runnabletarget)publicfinalStringgetName()publicstaticvoidsleep(longmillis)throwsInterruptedException14线程创建的两种方式1.“SubclassingThreadandOverridingrun”继承Thread类,重写run()方法2.“ImplementingtheRunnableInterface”实现Runnable接口应用场合当所定义的类为一个子类时,须利用Runnable接口线程的创建classABC{……}classXYZextendsABCimplementsRunnable{……}15第十讲线程概述线程的创建两种方式线程的同步1.synchronized2.wait()/notifyAll()/notify()线程的生命周期16独立执行的(independent)/异步的(asynchronous)线程共享资源的访问多个线程对同一资源进行操作(读/写)-协调当多个线程访问同一数据项(如静态字段、可全局访问对象的实例字段或共享集合)时,需要确保它们协调了对数据的访问,这样它们都可以看到数据的一致视图,而且相互不会干扰另一方的更改synchronized关键词wait()/notify()/notifyAll()方法等待/唤醒线程的同步17不同步的例子线程的同步Producer线程Consumer线程CubbyHole容器每隔一定时间放一个数0,1,2,3,…9取数一个程序,三个对象18线程的同步publicclassCubbyHole{privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassProducerextendsThread{privateCubbyHolecubbyhole;publicProducer(CubbyHolec){cubbyhole=c;}publicvoidrun(){for(inti=0;i10;i++){cubbyhole.put(i);System.out.println(Producer+put:+i);try{sleep((int)(Math.random()*100));}catch(InterruptedExceptione){}}}}publicclassConsumerextendsThread{privateCubbyHolecubbyhole;publicConsumer(CubbyHolec){cubbyhole=c;}publicvoidrun(){intvalue=0;for(inti=0;i10;i++){value=cubbyhole.get();System.out.println(Consumer“+got:+value);}}}publicclassTest{publicstaticvoidmain(String[]args){CubbyHoleh=newCubbyHole();Producerp=newProducer(h);Consumerc=newConsumer(h);p.start();c.start();}}19线程的同步多次重复取值javaTestProducerput:0Consumergot:0Consumergot:0Producerput:1Consumergot:1Consumergot:1Producerput:2Producerput:3Producerput:4Consumergot:4Consumergot:4Producerput:5...运行结果漏取20如何同步Producer放一个数,Consumer取一个数1.关键对象加锁2.协调线程线程的同步Producer线程Consumer线程CubbyHole容器每隔一定时间放一个数0,1,2,3,…9取数一个程序,三个对象211.给关键部分(CriticalSection)加锁(lock)CubbyHole对象synchronized关键词thetwothreadsmustnotsimultaneouslyaccesstheCubbyHole.TheJavaplatformthenassociatesalockwitheveryobjectthathassynchronizedcode线程的同步publicclassCubbyHole{privateintcontents;publicintget(){returncontents;}publicvoidput(intvalue){contents=value;}}publicclassCubbyHole{privateintcontents;public

1 / 69
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功