第8章多线程教学课件.ppt
《第8章多线程教学课件.ppt》由会员分享,可在线阅读,更多相关《第8章多线程教学课件.ppt(23页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java面向对象程序设计第第8章章 多线程多线程教学内容理解什么是多线程掌握多线程的两种实现方法掌握多线程的常用方法理解多线程同步与控制原理进程与线程进程与线程在计算机操作系统中每一个运行的程序被称作一个进程,而每个进程包含多个独立的指令序列,每个指令序列都完成特定的功能,被称为线程。线程也称作轻量级进程。就象进程一样,线程在程序中是独立的、并发的执行路径,每个线程有它自己的堆栈、自己的程序计数器和自己的局部变量。与分隔的进程相比,进程中的线程之间的隔离程度要小。它们共享内存、文件句柄和其它每个进程应有的状态。进程可以支持多个线程,它们看似同时执行,但互相之间并不同步。一个进程中的多个线程共享
2、相同的内存地址空间,这就意味着它们可以访问相同的变量和对象,而且它们从同一堆中分配对象。多线程是指一个程序能并发完成不同的功能,正是由于这种并发性,使得我们能够在同一台计算机上同时浏览图片欣赏,语言通话等。并发执行指一组在逻辑上互相独立的程序或程序段在执行过程中,其执行时间在客观上互相重叠,即一个程序段的执行尚未结束,另一个程序段的执行已经开始。线程和进程的区别在于每个进程都有独立的代码和数据空间(进程上下文)进程间的切换会有较大的开销;也在于线程可以看成轻量级的进程,同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器(PC),线程切换的开销小。在Java之中,如果要想实现多线程
3、的程序,那么就必须依靠一个线程的主体类(就好比主类的概念一样,表示的是一个线程的主类),这个类可以继承Thread类或实现Runnable接口来完成定义。线程所有完成的功能是通过方法run()来完成,方法run()称为线程体,当一个线程被建立并启动后,程序运行时自动调用run()方法,通过run()方法才能使建立线程的目的得以实现。在Java之中,如果要想实现多线程的程序,那么就必须依靠一个线程的主体类(就好比主类的概念一样,表示的是一个线程的主类),这个类可以继承Thread类或实现Runnable接口来完成定义。线程所有完成的功能是通过方法run()来完成,方法run()称为线程体,当一个
4、线程被建立并启动后,程序运行时自动调用run()方法,通过run()方法才能使建立线程的目的得以实现。线程的实现方式线程的实现方式继承继承Thread类方式类方式java.lang.Thread是一个负责线程操作的类,任何的类只需要继承了Thread类就可以成为一个线程的主类,但是既然是主类必须有它的使用方法,而线程启动的主方法是需要覆写Thread类中的run()方法才可以。使用继承Thread类方式实现多线程:1、创建一个类,该类extends Thread类,并且重写父类的run()方法public class MyThread extends Thread public void ru
5、n() /线程体2、在main()方法中创建线程对象MyThread t=new MyThread();3、再在main()方法中通过线程对象调用start()启动线程t.start();4、启动start()之后,会自动运行run()方法里面的代码。把run()方法里面的代码运行完了,该线程就结束了。【例8-1】:通过案例来掌握继承Thread类方式public class Demo8_01 public static void main(String args) TestThread thread = new TestThread();thread.start();for(inti=0;
6、i10; i+) System.out.print(Main:- + i+);switch (i) case 2: System.out.println();break;case 4: System.out.println();break;case 6: System.out.println();break;case 8: System.out.println();break;class TestThread extends Thread public void run() for(inti=0; i10; i+) System.out.print(Test: + i+);switch (i)
7、 case 2: System.out.println();break;case 4: System.out.println();break;case 6: System.out.println();break;case 8: System.out.println();break;该程序的运行结果:实现实现Runnable接口方式接口方式使用Thread类的确是可以方便的进行多线程的实现,但是这种方式最大的缺点就是单继承的问题,为此,在java之中也可以利用Runnable接口来实现多线程, 如果要想启动多线程依靠Thread类的start()方法完成,之前继承Thread类的时候可以将此方法
8、直接继承过来使用,但现在实现的是Runable接口,没有这个方法可以继承了,为了解决这个问题,还是需要依靠Thread类完成,在Thread类中定义了一个构造方法:public Thread(Runnable target),接收Runnable接口对象。使用实现Runnable接口方式实现多线程:1、定义一个类实现该接口Runnable接口,并且实现run()方法public class MyRunnable implements Runnablepublic void run() /方法体2、为该类创建一个对象 MyRunnable r=new MyRunnable();3、把该对象传递给
9、线程对象Thread t=new Thread(r);4、通过start()启动线程;t.start();启动线程后,会自动运行run()方法里面的代码。把run()方法里面的代码运行完了,该线程就结束了。【例8-2】:通过案例来掌握继承Runnable类方式public class Demo8_02 public static void main(String args) TestRunnable r = new TestRunnable();Thread t1 = new Thread(r);Thread t2 = new Thread(r);t1.start();t2.start();c
10、lass TestRunnable implements Runnable public void run() for(inti=0; i10; i+) System.out.print(No.+ i+);if(i=4)System.out.println();该程序的运行结果:线程常用方法线程常用方法有时实现多线程的过程中,要满足一些特定要求,如线程的睡眠(暂时停止一段时间执行)和线程等待(让其他线程执行一个时间段后在执行)等,下面是多线程一些常用的方法。表8.1 多线程常用方法方法主要功能setPriority()setPriority()设置线程的优先级。线程的优先级最高为10, 优先级
11、最低为1,默认的优先级为5getPriority()getPriority()获取线程的优先级join()join()线程合并,将当前线程与该线程“合并”,即等待该线程结束,再恢复当前线程的运行。让一个线程b “加入”到另一个线程a的尾部,在a执行完毕之前,b线程不能工作yield()yield()让出cpu,当前线程进入就绪队列等待调度wait()wait()当前线程进入对象的wait poolnotify()notify()唤醒等待池wait pool中的一个等待线程notifyAll()notifyAll()唤醒等待池wait pool中的所有等待线程sleep()使当前正在执行的线程以
12、指定的毫秒数暂停(暂时停止执行),具体取决于系统定时器和调度程序的精度和准确性public static void sleep(long millis) throws InterruptedException,设置的休眠单位是毫秒。线程的休眠指的是让程序的执行速度变慢一些。【例8-3】:通过案例来掌握sleep()方法class MyThread implements Runnable Overridepublic void run() for (int i = 0;i 5;i+) try Thread.sleep(100); catch (InterruptedException e) e.
13、printStackTrace(); System.out.print(Thread.currentThread().getName() + ,i = + i+);if (i=1) System.out.println();if (i=3) System.out.println(); public class Demo8_03 public static void main(String args) throws Exception MyThread mt = new MyThread();new Thread(mt, 线程1).start();new Thread(mt, 线程2).star
14、t();new Thread(mt, 线程3).start();new Thread(mt, 线程4).start();new Thread(mt, 线程5).start(); 该程序的运行结果:程序休眠了之后,程序运行速度变慢了。线程线程sleep()Thread类中有一个join()方法,在一个线程中启动另外一个线程的join方法,当前线程将会挂起,而执行被启动的线程,知道被启动的线程执行完毕后,当前 线程才开始执行。【例8-4】:通过案例来掌握join()方法class JoinThread extends Thread public JoinThread(String name) su
15、per(name);public void run() for (int i = 0;i 5;i+) try Thread.sleep(100); catch (InterruptedException e) e.printStackTrace(); System.out.print(Thread.currentThread().getName() + ,i = + i+); System.out.println(); public class Demo8_04 public static void main(String args) throws Exception for(int i=1;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多线程 教学 课件
限制150内