1、四川托普信息技术职业学院四川托普信息技术职业学院四川智畅网络技术有限公司2009级实训指导专题技术 Java 多线程编程IBM Software Institute四川托普信息技术职业学院知识目标 了解线程和进程的区别 掌握 Java多线程的两种实现方法和区别 了解线程状态变化 了解多线程的主要操作方法IBM Software Institute四川托普信息技术职业学院技能目标 了解线程概念并能创建多线程程序项目任务 完成一个倒计时窗口,自定义刷新时间,精确显示天数、小时数、分钟数和秒数项目解析 采用 GUI实现界面,调用 API,其实现分为两个步骤:创建线程,线程通信IBM Software
2、 Institute四川托普信息技术职业学院项目解析IBM Software Institute四川托普信息技术职业学院一、线程概念 进行与线程 操作系统分时间片轮流运行每一个程序,我们认为是同时执行这些程序工作 同时运行多个不同的进程 每个进行都有独立的代码和数据空间,进程间的切换会有较大的开销 线程是进一步发展这个概念,把不同进程间的切换在单个进程的若干不同功能模块之间的切换 同一类线程共享代码和数据空间,每个线程由独立的运行栈和程序计数器( PC),线程切换开销小 线程是一个程序内部的顺序控制流 多线程:在同一个应用程序中有多个顺序流同时执行IBM Software Institute四
3、川托普信息技术职业学院一、线程概念 JVM启动时会有一个由主方法( public static void main(String args))所定义的线程 ThreadDemo.java:程序获得运行的主线程对象 t,设置优先级为 9,使用 for循环设计输出线程名和 0-4的数字,每次循环让线程睡眠 100ms Java的线程是通过 java.lang.Thread类来实现的 可以通过创建 Thread的实例来创建新的线程 每个线程都是通过某个特定的 Thread对象所对应的run()来完成其操作的,方法 run()称为线程体 通过调用 Thread类的 start()方法来启动一个线程IB
4、M Software Institute四川托普信息技术职业学院二、线程创建、启动 可以有两种方式创建新线程 第一种定义一个 Thread的子类并重写 run()方法class MyThread extends Threadpublic void run()生成该类的对象MyThread myThread=new MyThread();启动线程myThread.start();IBM Software Institute四川托普信息技术职业学院二、线程创建、启动 可以有两种方式创建新线程 第二种定义一个线程类实现 Runnable接口, Runnable接口中只有一个方法: public vo
5、id run()定义线程体class MyRun implements Runnable使用 Thread类调用该接口实现类对象Thread myThread=new Thread(new MyRun();启动线程myThread.start();使用 Runnable接口可以为多个线程提供共享的数据在实现 Runnable接口的类中的 run()方法中可以使用 Thread的静态方法: public static Thread currentThread()获取当前线程的引用IBM Software Institute四川托普信息技术职业学院二、线程创建、启动 可以有两种方式创建新线程 第一
6、种 ThreadDemoEX.java:通过继承 Thread构建新线程,程序中存在 3个线程:第一个是 main()方法所在的主线程,主线程执行main()方法中的代码,另外两个线程分别是在 main()中创建的。只有程序中出 main()主线程外的其他线程都已经运行结束,main()主线程才运行结束 第二种 ThreadDemoEX.java:通过实现 Runnable接口构建新线程IBM Software Institute四川托普信息技术职业学院三、线程状态与生命周期 每个 Java程序都有一个默认的主线程,由系统自动生成,对应应用程序而言就是 main()方法执行的线程。 要实现多线程,必须在主线程中创建新的线程对象 新线程在生命周期中需要经历 5中状态: 新建:线程对象被声明并创建 就绪:调用 start()方法,拥有相应的内存空间和所属资源,进入线程队列等候 CPU调度 运行:处于就绪状态的线程被调度并获得 CPU资源 阻塞:一个正运行的线程因某种原因让出 CPU资源并暂时中止运行 死亡:线程不具有继续运行的能力(原因两种:线程完成自己全部工作;线程被强制性中止)