课件:多线程编程-第一讲_第1页
课件:多线程编程-第一讲_第2页
课件:多线程编程-第一讲_第3页
课件:多线程编程-第一讲_第4页
课件:多线程编程-第一讲_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

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

2、控制流。 一个进程在执行过程中,可以产生多个线程。每个线程也有自己产生、存在和消亡的过程。多任务处理基于进程的特点是允许计算机同时运行两个或更多的程序。程序是调度程序所分配的最小代码单位。基于线程的多任务处理环境中,线程是进程内部的一个控制序列流,线程是最小的处理单位。进程资源占用大,进程间通信困难。线程资源占用小,线程间通信容易。多线程的优点/特点多线程多线程使系统的空转时间最少,提高CPU利用率。共享资源,不浪费内存。线程间的信息传递容易。线程控制灵活,可在程序中自由调度。主 线 程在Java程序启动时,一个线程立刻运行,该线程通常称为程序的主线程。Main就是典型的主线程。主线程的重要性

3、体现在两个方面: 它是产生其他子线程的线程。通常它必须最后完成执行,因为它执行各种关闭动作。得到当前线程,并为其改名例子public class MainThreadDemo public static void main(String args) Thread t= Thread.currentThread( ); System.out.println(“当前线程名称是: +t.getName(); t.setName(MyJavaThread); System.out.println(“改名后线程名称是: +t.getName(); System.out.println(输出当前线程 +t

4、); 获得当前线程,即主线程改变线程的内部名称1、static Thread currentThread() 是一个静态方法,返回一个调用它的线程的引用。2、setName(String s) 改变线程的内部名称。3、getName( )得到当前引用线程的名称。4、当将一个线程对象作为输出时,将产生一个数组输出: 线程名称,优先级别,线程组名;5、每个线程都属于一个线程组,如果没有制定,那么有JVM来制定。创建线程两种方法来创建线程:继承java.lang.Thread类,并覆盖run() 方法。 class mythread extends Thread public void run( )

5、 /* 覆盖该方法*/ 实现java.lang.Runnable接口,并实现run() 方法。class mythread implements Runnable public void run( ) /* 实现该方法*/ 线程的启动新建的线程不会自动开始运行,必须通过start( )方法启动线程。如果不调用这个方法,线程将不会运行。也就是说可以事先创建线程,并在需要的时候才启动他们。如:继承Thread的线程:Mythread t = new Mythread ();t.start();实现Runnable接口的线程:Mythread mt = new Mythread ();Thread

6、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+ +getName(); try Thread.sleep(2*1000); catch(InterruptedException e) e.printStackTrace(); System.out.println( i+ en

7、d! ); 实现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 +threadNumber); for(int i=0; i5000; i+) System.out.println(i); System.out.println(“ thread +threadNumber+ is

8、 finished ); 实现Runnable接口Thread中提供的方法2-1方法用途final String getName( )返回线程的名称final void setName(String name)将线程的名称设置为由name指定的名称 static Thread currentThread()得到当前线程void start( ) 调用run( )方法启动线程,开始线程的执行static void sleep( )用于将线程挂起一段时间void interrupt()中断/唤醒一个线程Thread中提供的方法2-2方法用途final boolean isDaemon( )检查线程

9、是否为守候线程 final void setDaemon(boolean)根据传入的参数,将线程标记为守候线程(true)或用户线程(false)final void join( ) throws InterruptedException等待线程结束 static void yield() 使正在执行的线程临时暂停,并允许其他线程执行static int activeCount( )返回激活的线程数final boolean isAlive()判断线程是否仍在运行,则返回 true休眠线程sleep(): 让线程停止执行一段时间,该时间由给定的毫秒数决定。在线程休眠过程中,线程通常不能唤醒他们

10、自己。 sleep提供了两种静态的调用方法: 1. public static void sleep(longmillis) throws InterruptedException 2. public static void sleep(longmillis, intnanos) throws InterruptedException 唤醒线程interrupt() :唤醒线程,一个线程向一个指定的线程发出一个中断信号。如果目标线程是阻塞在与线程相关的方法(sleep( ),join( ),wait( ))中,则目标线程会转到一个非阻塞状态,如果该线程被中断,则给出一个interruptExc

11、eption异常,否则会设置一个布尔值标明该线程已经被中断过。方法: public void interrupt() 例子:SleepThread.java休眠-唤醒线程例子public class SleepThread extends Thread public void run() System.out.println(begin run); try Thread.sleep(5 * 1000); catch (InterruptedException ie) System.out.println(just five seconds); public static void main(S

12、tring args)throws java.io.IOException Thread t = new SleepThread(); t.start(); System.out.println(请按回车键,中断该线程); System.in.read(); errupt(); 让线程暂停5 秒钟唤醒/中断该线程让步线程yield():有时候线程可能正在等待事情的发生,或者可能正在进入这样一段代码:把cpu时间释放出来给另一个线程将可能改善系统性能或者用户操作。这样线程把cpu让给别的线程,而不用进入休眠状态而等待很长时间。方法:public static void yield()

13、方法为静态方法,只能影响当前正在运行的线程。该方法只是暗示,没有任何机制保证它将会被采纳。等待线程判断一个线程是否执行完毕的方法:1、final boolean isAlive() 返回true,线程执行完毕。2、final void join()throws InterruptedException 让当前线程等待目标线程执行完毕。主线程等待次线程的例子public class JoinThread extends Thread public void run() System.out.println(begin run); try Thread.sleep(5000 ); catch (I

14、nterruptedException 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(); System.out.println(主线程死亡); 线程的状态挂起 新线程(新建)就绪运行死亡睡眠等待阻塞线 程 状 态一个线程可以处于以下四个状

15、态之一:新建(new):用new语句创建线程对象处于新建状态,在堆区中也分配了该线程对象的内存.就绪(runnable):当一个线程对象创建后,其他线程调用它的start()方法,该线程就进入就绪状态.该线程位于可运行池中,等待获得CPU使用权.运行状态(Running):该状态的线程占用CPU,执行程序代码,只有就绪状态的线程才有机会转到运行状态.阻塞(blocked):因某种原因放弃CPU,暂时停止运行.当线程处于阻塞状态时,Java虚拟机不给线程分配CPU,直到线程重新进入就绪状态,才有机会转到运行状态.死亡(dead):当线程退出run()方法时,就进入死亡状态,该线程结束的生命周期.

16、线程的调度新建状态可运行状态终止状态阻 塞 状 态Thread t1=new Thread();t1.start();sleep()suspend()resume()wait()notify();I/O受阻I/O完成休眠完毕run()运行完毕调用stop()创建多线程创建多个线程并启动 继承Thread的线程:ExtendsThread et 1 = new ExtendsThread ();et1.start();ExtendsThread et 2 = new ExtendsThread ();et2.start();实现Runnable接口的线程:Runnable ir = new Im

17、plementsRunnable ();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) = name; public void run() try Thread.sleep(5000); catch(java.lang.InterruptedException e) System.ou

18、t.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 MultThread(three); mt1.start(); mt2.start(); mt3.start(); 多线程的例子-2public class Mult

19、RunnableDemo 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 !); public 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 中的线程优先级是在 Thread 类中定

温馨提示

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

评论

0/150

提交评论