课件:多线程编程-第一讲.ppt

上传人(卖家):三亚风情 文档编号:3390845 上传时间:2022-08-26 格式:PPT 页数:32 大小:583KB
下载 相关 举报
课件:多线程编程-第一讲.ppt_第1页
第1页 / 共32页
课件:多线程编程-第一讲.ppt_第2页
第2页 / 共32页
课件:多线程编程-第一讲.ppt_第3页
第3页 / 共32页
课件:多线程编程-第一讲.ppt_第4页
第4页 / 共32页
课件:多线程编程-第一讲.ppt_第5页
第5页 / 共32页
点击查看更多>>
资源描述

1、 多线程编程回顾内容1、I/O简介2、File/RandonAccessFile类3、字节流与字符流的子类使用InputStream/OutputStreamFileInputStream/FileOutStreamReader/Writer目 标 线程的概念 主线程 创建线程 线程的基本操作 线程不同状态的转换 守侯线程概 念什么是程序?什么是程序?程序是一段静态的代码,它是应用程序执行的蓝本。是一段静态的代码,它是应用程序执行的蓝本。什么是进程?什么是进程?进程是指一种正在运行的程序,有自己的地址空间。进程是指一种正在运行的程序,有自己的地址空间。作为蓝本的程序可以被多次加载到系统的不同内

2、存区域分别执行,形成不同的进程。作为蓝本的程序可以被多次加载到系统的不同内存区域分别执行,形成不同的进程。基于进程的特点是允许计算机同时运行两个或更多的程序。基于进程的特点是允许计算机同时运行两个或更多的程序。什么是线程什么是线程?线程线程是进程内部单一的一个顺序控制流。一个进程在执行过程中,可以产生多个线程。每个线程也有自己产生、存在和消亡的过程。多任务处理基于进程的特点是允许计算机同时运行两个或更多的程序。程序是调度程序所分配的最小代码单位。基于线程的多任务处理环境中,线程是进程内部的一个控制序列流,线程是最小的处理单位。进程资源占用大,进程间通信困难。线程资源占用小,线程间通信容易。多线

3、程的优点/特点 多线程 多线程使系统的空转时间最少,提高CPU利用率。共享资源,不浪费内存。线程间的信息传递容易。线程控制灵活,可在程序中自由调度。主 线 程 在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。Main就是典型的主线程。主线程的重要性体现在两个方面:它是产生其他子线程的线程。通常它必须最后完成执行,因为它执行各种关闭动作。得到当前线程,并为其改名例子public class MainThreadDemo public static void main(String args)Thread t=Thread.currentThread();System.out.

4、println(“当前线程名称是:+t.getName();t.setName(MyJavaThread);System.out.println(“改名后线程名称是:+t.getName();System.out.println(输出当前线程+t);获得当前线获得当前线程,即主线程,即主线程程改变线程改变线程的内部名的内部名称称 1、static Thread currentThread()是一个静态方法,返回一个调用它的线程的引用。2、setName(String s)改变线程的内部名称。3、getName()得到当前引用线程的名称。4、当将一个线程对象作为输出时,将产生一个数组输出:线程名

5、称,优先级别,线程组名;5、每个线程都属于一个线程组,如果没有制定,那么有JVM来制定。创建线程两种方法来创建线程:继承java.lang.Thread类,并覆盖run()方法。class mythread extends Thread public void run()/*覆盖该方法*/实现java.lang.Runnable接口,并实现run()方法。class mythread implements Runnable public void run()/*实现该方法*/线程的启动 新建的线程不会自动开始运行,必须通过start()方法启动线程。如果不调用这个方法,线程将不会运行。也就是说

6、可以事先创建线程,并在需要的时候才启动他们。如:继承Thread的线程:Mythread t=new Mythread();t.start();实现Runnable接口的线程:Mythread mt=new Mythread();Thread t =new Thread(mt);t.start();继承Thread类例子public class SimpleThread extends Thread public SimpleThread(String ms)super(ms);public void run()for(int i=1;i=10;i+)System.out.println(i+

7、getName();try Thread.sleep(2*1000);catch(InterruptedException e)e.printStackTrace();System.out.println(i+end!);实现Runnable接口例子public class Mythread implements Runnable public int threadNumber;public Mythread(int num)this.threadNumber=num;public void run()System.out.println(Im thread number+threadNumb

8、er);for(int i=0;i5000;i+)System.out.println(i);System.out.println(“thread+threadNumber+is finished);实现实现RunnableRunnable接口接口Thread中提供的方法2-1方法方法用途final String getName()返回线程的名称final void setName(String name)将线程的名称设置为由name指定的名称 static Thread currentThread()得到当前线程void start()调用run()方法启动线程,开始线程的执行static

9、void sleep()用于将线程挂起一段时间void interrupt()中断/唤醒一个线程Thread中提供的方法2-2方法用途final boolean isDaemon()检查线程是否为守候线程 final void setDaemon(boolean)根据传入的参数,将线程标记为守候线程(true)或用户线程(false)final void join()throws InterruptedException等待线程结束 static void yield()使正在执行的线程临时暂停,并允许其他线程执行static int activeCount()返回激活的线程数final bo

10、olean isAlive()判断线程是否仍在运行,则返回 true休眠线程 sleep():让线程停止执行一段时间,该时间由给定的毫秒数决定。在线程休眠过程中,线程通常不能唤醒他们自己。sleep提供了两种静态的调用方法:1.public static void sleep(long millis)throws InterruptedException 2.public static void sleep(long millis,int nanos)throws InterruptedException 唤醒线程 interrupt():唤醒线程,一个线程向一个指定的线程发出一个中断信号。如

11、果目标线程是阻塞在与线程相关的方法(sleep(),join(),wait())中,则目标线程会转到一个非阻塞状态,如果该线程被中断,则给出一个interruptException异常,否则会设置一个布尔值标明该线程已经被中断过。方法:public void interrupt()例子:例子:SleepThread.java休眠-唤醒线程例子public class SleepThread extends Thread public void run()System.out.println(begin run);try Thread.sleep(5*1000);catch(Interrupte

12、dException ie)System.out.println(just five seconds);public static void main(String args)throws java.io.IOException Thread t=new SleepThread();t.start();System.out.println(请按回车键,中断该线程);System.in.read();t.interrupt();让线程暂停让线程暂停5 5 秒钟秒钟唤醒唤醒/中断中断该线程该线程让步线程 yield():有时候线程可能正在等待事情的发生,或者可能正在进入这样一段代码:把cpu时间释

13、放出来给另一个线程将可能改善系统性能或者用户操作。这样线程把cpu让给别的线程,而不用进入休眠状态而等待很长时间。方法:public static void yield()方法为静态方法,只能影响当前正在运行的线程。该方法只是暗示,没有任何机制保证它将会被采纳。等待线程 判断一个线程是否执行完毕的方法:1、final boolean isAlive()返回true,线程执行完毕。2、final void join()throws InterruptedException 让当前线程等待目标线程执行完毕。主线程等待次线程的例子public class JoinThread extends Thr

14、ead public void run()System.out.println(begin run);try Thread.sleep(5000);catch(InterruptedException ie)System.out.println(InterruptedException);public static void main(String args)throws java.lang.InterruptedException Thread t=new JoinThread();t.start();System.out.println(等待5秒后,线程t死亡);t.join();Syst

15、em.out.println(主线程死亡);线程的状态挂起挂起 新线程(新建)新线程(新建)就绪就绪运行运行死亡死亡睡眠睡眠等待等待阻塞阻塞线 程 状 态 一个线程可以处于以下四个状态之一:新建(new):用new语句创建线程对象处于新建状态,在堆区中也分配了该线程对象的内存.就绪(runnable):当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态.该线程位于可运行池中,等待获得CPU使用权.运行状态(Running):该状态的线程占用CPU,执行程序代码,只有就绪状态的线程才有机会转到运行状态.阻塞(blocked):因某种原因放弃CPU,暂时停止运行.当线程

16、处于阻塞状态时,Java虚拟机不给线程分配CPU,直到线程重新进入就绪状态,才有机会转到运行状态.死亡(dead):当线程退出run()方法时,就进入死亡状态,该线程结束的生命周期.线程的调度新建状态可运行状态终止状态阻 塞 状 态Thread t1=new Thread();t1.start();sleep()suspend()resume()wait()notify();I/O受阻受阻I/O完成完成休眠完毕run()运行完毕运行完毕调用调用stop()创建多线程 创建多个线程并启动创建多个线程并启动 继承Thread的线程:ExtendsThread et 1=new ExtendsThr

17、ead();et1.start();ExtendsThread et 2=new ExtendsThread();et2.start();实现Runnable接口的线程:Runnable ir=new ImplementsRunnable();Thread rt1=new Thread(ir);Thread rt2=new Thread(ir);rt1.start();rt2.start();多线程的例子-1public class MultThread extends Thread String name;public MultThread(String name)this.name=nam

18、e;public void run()try Thread.sleep(5000);catch(java.lang.InterruptedException e)System.out.println(Interrupted Exception!);System.out.println(Thread+name+run finish!);public static void main(String args)MultThread mt1=new MultThread(one);MultThread mt2=new MultThread(two);MultThread mt3=new MultThr

19、ead(three);mt1.start();mt2.start();mt3.start();多线程的例子-2public class MultRunnableDemo implements Runnable int i=0;public MultRunnableDemo()public void run()i+;System.out.println(Thread+i+run!);try Thread.sleep(5000);catch(java.lang.InterruptedException e)System.out.println(Interrupted Exception!);pub

20、lic static void main(String args)MultRunnableDemo mr=new MultRunnableDemo();Thread t1=new Thread(mr);Thread t2=new Thread(mr);Thread t3=new Thread(mr);t1.start();t2.start();t3.start();使用runnable接口创建多线程的优点:1.对象可以自由地继承自另一个类。2.同一个runnable对象可以传递给多个线程,可以实现资源共享。3.减小创建新线程实例所需的可观内存和cpu时间。线程优先级 Java 中的线程优先级是

21、在 Thread 类中定义的常量 MIN_PRIORITY:值为 1 NORM_PRIORITY:值为 5(缺省值)MAX_PRIORITY:值为 10 有关优先级的方法有两个:final void setPriority(int level):修改线程的当前优先级 final int getPriority():返回线程的优先级共享资源的冲突 例子:想像下,几个人围着桌子吃蛋糕,当你举起叉子,准备叉起最后一块蛋糕,正当叉子碰到蛋糕的时候才发现它已经被另一个叉子叉起。这个现象就是共享资源中出现的冲突,这个现象我们就称为并发。并发和互斥锁 并发:由两个及其以上的线程同时访问一个共享资源的现象称为

22、并发。互斥锁:一种标志,表明在给定的时刻只允许一个线程访问共享资源,具有互相排斥的效果。这种机制常常称为“互斥”(mutex)。例子:TicketThreadDemo.java同步Synchronization 同步:当两个或两个以上的线程需要共享资源,必须使用某种方法来确定资源在某一时刻仅被一个线程占用,达到此目的的过程叫做同步。在JAVA中通过互斥锁标志Synchronization关键字的运用来实现方法/变量的同步。同步的实现 Java中同步的两种方法:方法级同步(method-level synchronization)synchronized void method()/同步的方法 程序块级同步(block-level synchronization)synchronized(object)/要同步的语句

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(课件:多线程编程-第一讲.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|