Java线程及多线程技术及应用 电脑资料

上传人:郭** 文档编号:156834089 上传时间:2020-12-20 格式:DOC 页数:48 大小:1.02MB
返回 下载 相关 举报
Java线程及多线程技术及应用 电脑资料_第1页
第1页 / 共48页
Java线程及多线程技术及应用 电脑资料_第2页
第2页 / 共48页
Java线程及多线程技术及应用 电脑资料_第3页
第3页 / 共48页
Java线程及多线程技术及应用 电脑资料_第4页
第4页 / 共48页
Java线程及多线程技术及应用 电脑资料_第5页
第5页 / 共48页
点击查看更多>>
资源描述

《Java线程及多线程技术及应用 电脑资料》由会员分享,可在线阅读,更多相关《Java线程及多线程技术及应用 电脑资料(48页珍藏版)》请在金锄头文库上搜索。

1、Java线程及多线程技术及应用 电脑资料 1、进程和线程的基础知识 l 进程:运行中的应用程序称为进程,拥有系统资源(cpu、内存) l 线程:进程中的一段代码,一个进程中可以哦有多段代码, 在java中,程序入口被自动创建为主线程,在主线程中可以创建多个子线程。 区别: 1、是否占有资源问题 2、创建或撤销一个进程所需要的开销比创建或撤销一个线程所需要的开销大。 3、进程为重量级组件,线程为轻量级组件 l 多进程: 在操作系统中能同时运行多个任务(程序) l 多线程: 在同一应用程序中有多个功能流同时执行 2、线程的主要特点 l 不能以一个文件名的方式独立存在在磁盘中; l 不能单独执行,只

2、有在进程启动后才可启动; l 线程可以共享进程相同的内存(代码与数据)。 3、线程的主要用途 l 利用它可以完成重复性的工作(如实现动画、声音等的播放)。 l 从事一次性较费时的初始化工作(如网络连接、声音数据文件的加载)。 l 并发执行的运行效果(一个进程多个线程)以实现更复杂的功能 4、多线程(多个线程同时运行)程序的主要优点 l 可以减轻系统性能方面的瓶颈,因为可以并行操作; l 提高CPU的处理器的效率,在多线程中,通过优先级,可以使重要的程序优先操作,提高了任务管理的灵活性;另一方面,在多CPU系统中,可以把不同的线程在不同的CPU中执行,真正做到同时处理多任务。 1、与线程编程有关

3、的一些概念 创建方式: 1 继承java.lang.Thread类 2 实现java.lang.Runnable接口 线程体:public void run()方法,其内的程序代码决定了线程的行为和功能。 线程启动: public void start () , 线程启动后,需要获取cpu才能自动调用run()运行。 线程休眠: public void sleep(long ms), 线程将暂停,放弃cpu 2、利用继承Thread类创建线程的示例 package .px1987.j2se.thread.base; /*通过Thread类实现多线程 定义一个Thread的子类并重写其run方法

4、.*/ public class MyThread extends Thread Override public void run() while (true) System.out.println(invoke MyThread run method); public static void main(String args) / main方法测试线程的创建与启动 MyThread myThread = new MyThread(); / 实例化MyThread的对象 myThread.start(); / 调用myThread对象的start方法启动一个线程 3、利用实现Runable接口

5、创建线程的示例 package .px1987.j2se.thread.base; /*通过Runable接口实现多线程 定义MyRunable类实现Runnable接口,并实现接口中的run方法。*/ public class MyRunable implements Runnable public void run() while (true) System.out.println(invoke MyRunable run method); public static void main(String args) / main方法测试线程的创建与启动 / 建立MyRunable类的对象,以

6、此对象为参数建立Thread类的对象 Thread thread = new Thread(new MyRunable(); thread.start(); / 调用thread对象的start方法启动一个线程 1、新建状态 用new关键字和Thread类或其子类建立一个线程对象后,该线程对象就处于新生状态。处于新生状态的线程有自己的内存空间,通过调用start方法进入就绪状态(runnable)。 2、就绪状态 处于就绪状态的线程已经具备了运行条件,但还没有分配到CPU,处于线程就绪队列,等待系统为其分配CPU。等待状态并不是执行状态,当系统选定一个等待执行的Thread对象后,它就会从等待

7、执行状态进入执行状态,系统挑选的动作称之为“cpu调度”。一旦获得CPU,线程就进入运行状态并自动调用自己的run方法。 3、死亡状态 死亡状态是线程生命周期中的最后一个阶段。线程死亡的原因有两个: 一个是正常运行的线程完成了它的全部工作; 另一个是线程被强制性地终止,如通过执行stop或destroy方法来终止一个线程。 Method stop() & destroy() in the class Thread is deprecated。 当一个线程进入死亡状态以后,就不能再回到其它状态了。 让一个Thread对象重新执行一次的唯一方法,就是重新产生一个Thread对象。 4、体现线程状态

8、转变的代码示例 package .px1987.j2se.thread.base; public class MyRunable1 implements Runnable public void run() while (true) System.out.println(invoke MyRunable run method); public static void main(String args) Thread thread = new Thread(new MyRunable(); / 新生状态 thread.start(); / 就绪状态,获得CPU后就能运行 try Thread.s

9、leep(5000); catch (InterruptedException e) e.printStackTrace(); thread.stop(); / 死亡状态 通过查API可以看到stop方法和destory方法已经过时了,所以不能再用,那要怎样做才能强制的销毁一个线程呢? 1、在run方法中执行return 线程同样结束 2、可以在while循环的条件中设定一个标志位,当它等于false的时候,while循环就不在运行,这样线程也就结束了。代码为实现的代码示例: package .px1987.j2se.thread.StateControl; public class MyRu

10、nable2 implements Runnable private boolean isStop; /线程是否停止的标志位 public void run() while (!isStop) System.out.println(invoke MyRunable run method); public void stop() /终止线程 isStop=true; public static void main(String args) MyRunable myRunable=new MyRunable(); Thread thread = new Thread(myRunable); thr

11、ead.start(); try Thread.sleep(5000); catch (InterruptedException e) e.printStackTrace(); myRunable.stop(); /正确的停止线程的方法 5、阻塞状态 处于运行状态的线程在某些情况下,如执行了sleep(睡眠)方法,或等待I/O设备等资源,将让出CPU并暂时停止自己的运行,进入阻塞状态。 在阻塞状态的线程不能进入就绪队列。只有当引起阻塞的原因消除时,如睡眠时间已到,或等待的I/O设备空闲下来,线程便转入就绪状态,重新到就绪队列中排队等待,被系统选中后从原来停止的位置开始继续运行。有三种方法可以暂

12、停Threads执行: (1)sleep方法 可以调用Thread的静态方法:public static void sleep(long millis) throws InterruptedException 使得当前线程休眠(暂时停止执行millis毫秒)。由于是静态方法,sleep可以由类名直接调用:Thread.sleep()。下面为代码示例: package .px1987.j2se.thread.p5; import java.util.Date; import java.text.SimpleDateFormat; class SleepTest implements Runnab

13、le private static SimpleDateFormat format = new SimpleDateFormat(yyyy-MM-dd hh:mm:ss); public void run() System.out.println(child thread begin); int i = 0; while (i+ 5) System.out.println(format.format(new Date(); try Thread.sleep(5000); catch (InterruptedException e) e.printStackTrace(); System.out

14、.println(child thread dead at: + format.format(new Date(); public static void main(String args) Runnable r = new SleepTest(); Thread thread = new Thread(r); thread.start(); try Thread.sleep(20000); catch (InterruptedException e) e.printStackTrace(); thread.interrupt(); System.out.println(main method

15、 dead!); 该程序的运行结果如下: child thread begin xx-02-06 04:50:29 xx-02-06 04:50:34 xx-02-06 04:50:39 xx-02-06 04:50:44 main method dead! java.lang.InterruptedException: sleep interrupted at java.lang.Thread.sleep(Native Method) at .px1987.j2se.thread.p5.Thread4.run(Thread4.java:17) at java.lang.Thread.run(Unknown Source) xx-02-06 04:50:49 child thre

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 总结/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号